博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读写二进制文件
阅读量:4154 次
发布时间:2019-05-25

本文共 2940 字,大约阅读时间需要 9 分钟。

import java.io._import java.nio._def writeInts(out:OutputStream, a:Array[Int], buf:ByteBuffer, n: Int) {    var nwritten = 0;    val ibuff = buf.asIntBuffer	val bbuff = buf.array	while (nwritten < n) {		val todo = if (n-nwritten > ibuff.capacity) ibuff.capacity else (n - nwritten)		ibuff.put(a, nwritten, todo)		ibuff.position(0)		out.write(bbuff,0,todo*4)		nwritten += todo	}}def writeFloats(out:OutputStream, a:Array[Float], buf:ByteBuffer, n:Int) {	var nwritten = 0	val fbuff = buf.asFloatBuffer	val bbuff = buf.array	while (nwritten < n) {		val todo = if (n - nwritten > fbuff.capacity) fbuff.capacity else (n - nwritten)		fbuff.put(a, nwritten, todo)		fbuff.position(0)		out.write(bbuff, 0, todo*4)		nwritten += todo	}}def writeDoubles(out:OutputStream, a:Array[Double], buf:ByteBuffer, n:Int) {	var nwritten = 0	val dbuff = buf.asDoubleBuffer	val bbuff = buf.array	while (nwritten < n) {		val todo = if (n - nwritten > dbuff.capacity) dbuff.capacity else n - nwritten		dbuff.put(a, nwritten, todo)		dbuff.position(0)		out.write(bbuff, 0, 8*todo)		nwritten += todo	}}//read n ints to a, buf is a buffer//instream --> buffer --> Arraydef readInts(in:InoutStream, a:Array[Int], buf:ByteBuffer, n:Int) {	val nread = 0//a has read ints from buff	val ibuff = buf.asIntBuffer	val bbuff = buf.array	var readnow = 0// buf has read n bytes from instream	while (nread < n) {		val todo = if (n - nread > ibuff.capacity) ibuff.capacity else (n - nread) //for instants, need read 5 ints, 20 bytes, but buff only  has 18 bytes, so first time only read 16 bytes 		readnow += in.read(bbuff, readnow, todo*4 - readnow) //last time 'readnow' bytes hasnt put in array, but remain in the head of buff		ibuff.get(a, nread, readnow/4) //put and convert bytes in to ints to array		ibuff.position(0) //get will get bytes from position		nread += readnow/4		if (readnow %4 ! =0) {			System.arraycopy(bbuff, 4*(readnow/4), bbuff, 0, readnow%4)		}		readnow = readnow%4			}}def writeBin() {	val bos = new BufferedOutputStream(new FileOutputStream("tsmat"), 1024)	val head  = new Array[Int](4)	val tbuf = ByteBuffer.allocate(16).order(ByteOrder.LITTLE_ENDIAN)	val rows = 4	val cols = 5	val nnz = 8	head(0) = 231	head(1) = rows	head(2) = cols	head(3) = nnz //nnz	writeInts(bos, head, tbuf, 4)	val buff = ByteBuffer.allocate(1024).order(ByteOrder.LITTLE_ENDIAN)	val colv = Array(0,1,2,4,6,8)	val rowv = Array(2,1,1,2,2,3,0,2)	val data = Array(0.3826f,0.5757f,0.2343f,0.4599f,0.5948f,0.6836f,0.49744f,0.92241f)	writeInts(bos, colv, buff,cols+1)	writeInts(bos, rowv, buff, nnz)	writeFloats(bos, data, buff, nnz)	bos.close}def readBin() {	val bis = new BufferedInputStream(new FileInputStream("s45.1"), 1024)	val buff = ByteBuffer.allocate(1024).order(ByteOrder.LITTLE_ENDIAN)	val bbuff = buff.array	val len = bis.read(bbuff,0,1024)	println("len = " + len)	for (i<-1 to 17) print(buff.getInt + " ")	for (i<-1 to (len/4-17)) print(buff.getFloat + " ")	bis.close}writeBin

转载地址:http://mueti.baihongyu.com/

你可能感兴趣的文章
Java调用海康HCUsbSDK制卡刷卡读卡
查看>>
简单的投屏、数据大屏前端代码
查看>>
JAVA定时器quartz的使用
查看>>
点击input弹出div,点击div外隐藏div。js阻止冒泡事件
查看>>
网页自适配手机端
查看>>
maven jar包冲突解决
查看>>
记一次又一次的被相同问题搞得心力交瘁
查看>>
org.hibernate.exception.GenericJDBCException: could not execute statement
查看>>
当你想放弃技术的时候
查看>>
小确幸
查看>>
支付宝提现至个人账户接口开发
查看>>
脑阔疼
查看>>
springboot学习(一):初识SpringBoot(入门篇)
查看>>
数据库查询优化技术(一):数据库与关系代数
查看>>
数据库查询优化技术(二):子查询优化
查看>>
网站接入第三方登录功能:Java开发QQ登录
查看>>
MyEclipse的debug远程调试
查看>>
java中的日期转换、springmvc接收前台的Date类型参数遇到的坑
查看>>
Ajax使用formData提交带图片上传的表单
查看>>
Linux服务器安装Tomcat、MySQL和一些配置
查看>>