java使用ByteArrayOutputStream读取任意大小的二进制数据
来源:互联网 发布:centos开启ftp服务 编辑:程序博客网 时间:2024/04/29 19:30
java提供了很丰富的io接口,已经可以满足我们大部分读取数据的需求,这个在C读取数据需要自己定义缓冲区数组大小,而且要小心翼翼的防止缓冲区溢出的情况相当不同。一般情况下我们读取的数据都是直接读取成为String类型的,可是有些时候还是难免要读取成为二进制的数据。
public int read(byte b[]) throws IOException { <span style="white-space:pre"></span>return readBytes(b, 0, b.length); }这个是java提供Inputstream的接口,我们必须定义一个byte数组去接收数据,而且我们根本不知道数据有多大,这个时候就要自己写数据缓冲区还有自动增长的数组,太麻烦了。
经过查一些资料之后,发现java已经提供了一个叫做ByteArrayOutputStream的类,这个类实现了一个输出流,内部的数据是写进自身维护的一个自动增长的byte数组,而且可以使用toByteArray()还有toString()来获得数据。
public static byte[] read(InputStream in) throws IOException { BufferedInputStream bis = new BufferedInputStream(in); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int c = bis.read(); while((c!=-1)){ baos.write(c); c = bis.read(); } bis.close(); return baos.toByteArray(); }之所以为什么用Buffer来缓冲流来封装输入流,是因为使用了Buffer,jvm会自动把数据读取进去缓冲区,然后再从缓冲区直接读取,比直接从inputstream一个字节一个字节读取效率高。
期待有更好的解决方案可以和我分享下!
----------------------------------------------------------------
经过在开发过程中的使用了一下Apache 下的commons项目里面的Ioutils子项目,里面封装了常用的io读写操作,其中就有符合我需要的读写任意大小二进制数据需求的方法:IOUtils.toByteArray(...);
看了下里面的代码也大致和我是一样的做法,也是用到了ByteArrayOutputStream这个类,不过我在代码里面是不断地往里面write。IOUtils里面则是用了常用的缓存区读写,效率上比我的代码快。
0 1
- java使用ByteArrayOutputStream读取任意大小的二进制数据
- Java 读取 C++写入的二进制数据
- java类ByteArrayOutputStream的toString()方法使用
- 文件与二进制数据互转-ByteArrayOutputStream
- java 使用arraylist生成二维任意大小的数组
- 使用FileInputStream和ByteArrayOutputStream 实现文本数据的回读
- 使用FileInputStream和ByteArrayOutputStream 实现文本数据的回读
- 使用jQuery AJAX读取二进制数据
- Java用JDBC保存读取二进制数据
- JAVA实现输出任意大小的等腰三角形
- JAVA 创建任意大小的文件
- 如何编写自动读取任意大小文本的程序
- caffe:使用C++来提取任意一张图片的特征(从内存读取数据)
- 二进制数据读取
- CDBVariant 二进制数据读取
- Java读取MP3文件的二进制数据内附带的信息
- 封装android 通讯使用二进制进行数据交换 2个必要的读取,写入操作
- 使用ByteArrayOutputStream解决FileInputStream读取过程中的乱码问题
- 自定义COM组件的实现 WSC篇
- 关于内存管理
- fatal error C1853: 'Debug/License.pch' is not a precompiled header file created with this compiler
- Xms Xmx PermSize MaxPermSize 区别
- Android消息推送完美方案[转]
- java使用ByteArrayOutputStream读取任意大小的二进制数据
- 聊天系统
- 关于 Activity 生命周期 和 Fragment 转屏重叠的问题
- Java Annotation
- 个人电脑做WEB服务器
- HTML 学习笔记(四)HTML文本格式化
- Android中asset文件夹和raw文件夹区别
- ANDROID_HOME 环境变量的设置
- 面试题讲解(一) java继承、静态代码块、非静态代码块的使用