`
wwty
  • 浏览: 542929 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

ByteArrayInputStream和ByteArrayOutputStream

 
阅读更多

ByteArrayInputStream的精髓是将一个字节数组包装到流中
有这样一个场景:
客户端和服务器端交互,当连接建立之后,如果只是根据协议用DataInputStream的readInt() 或者readByte() 等固定方法一个一个的读,那是相当消耗资源的,如果一次将所需要的数据读取完毕,然后剩下的就是本地解析,那就省了不少交互资源

 

int packetlen = din.readInt();
int len = packetlen-4;
byte[] b = new byte[len];
din.readFully(b);

 

这段代码一次读够了客户端过来的数据

然后

ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(b);
DataInputStream dataInputStream = new DataInputStream(byteArrayInputStream);
//此时的输入流已经是本地的输入流了,在本地你可以随心所欲
dataInputStream.readByte() 
dataInputStream.readInt() 
.....

 

 

ByteArrayOutputStream创建一个新的字节数组输出流
场景如下:服务器端处理完毕需要往客户端返回数据,如果使用DataOutputStream的writeInt(int v)或者writeByte(int v)等方法一个一个的写,那么和读取的场景性质就一样了:交互资源是相当消耗的;因此如果现在本地把数据组织完毕之后,能一次传送,就好了。

声明字节数组输出流

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(29);

 

对字节数组输出流进行包装,这样写入的时候,数据真正进入的还是ByteArrayOutputStream

DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);

 

往流当中写入数据

dataOutputStream.writeInt(29);//packetlen
dataOutputStream.writeInt(JVConstant.SGIP_BIND_RESP);//command
dataOutputStream.write(sequence);//sequence-number
dataOutputStream.writeByte(0);//Result
byte[] reserve = new byte[8];
dataOutputStream.write(reserve);//Reserve
dataOutputStream.flush();

 

从字节数组输出流当中将数据读取出来

byte[] result = byteArrayOutputStream.toByteArray();

 

关闭流

byteArrayOutputStream.close();
dataOutputStream.close();

 

返回字节数据

return result;

 

分享到:
评论

相关推荐

    【IT十八掌徐培成】Java基础第16天-04.ByteArrayInputStream-ByteArrayOutputStream.zip

    今天我们要深入学习的是Java中的两个重要类:ByteArrayInputStream和ByteArrayOutputStream,它们属于Java.io包,是处理内存中字节数组的流对象。 ByteArrayInputStream是InputStream的一个子类,它允许我们从字节...

    java学习大纲java学习大纲.doc

    位元串流还包括SequenceInputStream、PrintStream、ByteArrayInputStream和ByteArrayOutputStream等。字元串流如Reader和Writer处理字符流,例如InputStreamReader和OutputStreamWriter,FileReader和FileWriter,...

    java输入输出流总结.pdf

    - ByteArrayInputStream 和 ByteArrayOutputStream 分别用于内存中的字节输入和输出。 - FilterInputStream 和 FilterOutputStream 提供了过滤和装饰流的功能,可以添加额外的处理逻辑。 - DataInputStream 和 ...

    JAVAIO操作总结

    字节流以字节为单位进行数据传输,主要由InputStream和OutputStream家族构成,例如FileInputStream和FileOutputStream用于文件操作,ByteArrayInputStream和ByteArrayOutputStream则用于内存中的字节数组。...

    Android应用源码之IOStreamSample_Android.zip

    2. ByteArrayInputStream和ByteArrayOutputStream:在内存中操作字节数组。 3. InputStreamReader和OutputStreamWriter:将字节流转换为字符流,支持不同字符编码。 4. BufferedReader和BufferedWriter:提供缓冲...

    第8章JavaIO第8章JavaIO第8章JavaIO第8章JavaIO第8章JavaIO第8章JavaIO

    ByteArrayInputStream和ByteArrayOutputStream则允许在内存中读写数据。 8.2 标准IO Java通过System类提供标准输入、输出和错误流,分别对应于System.in、System.out和System.err,它们都是InputStream或...

    JAVA解析PPT教案学习.pptx

    常用的节点流包括与文件操作相关的FileInputStream和FileOutputStream,以及处理内存数据的ByteArrayInputStream和ByteArrayOutputStream。处理流则包括BufferedInputStream、BufferedOutputStream、DataInputStream...

    javaIO流[归纳].pdf

    - **字节数组流**:ByteArrayInputStream和ByteArrayOutputStream用于在内存中操作字节数组。例如,可以通过ByteArrayOutputStream创建一个字节数组,然后通过ByteArrayInputStream读取该数组。 Java IO流体系结构...

    JAVA语言程序设计第七章(2)ppt课件.ppt

    除了基本的流,Java还提供了多种特定用途的流,如内存流(如ByteArrayInputStream和ByteArrayOutputStream)、字符串流(StringReader和StringWriter)、管道流(PipedReader和PipedWriter)以及文件流(FileReader...

    Java程序开发教学课件:09-输入输出处理.ppt

    此外,还有ByteArrayInputStream和ByteArrayOutputStream用于内存中的字节流操作,以及FilterInputStream和FilterOutputStream作为装饰者模式的实现,用于扩展和过滤字节流的功能。 字符流处理则是针对字符数据,如...

    IO笔记.zip关于javaIO流部分的详细笔记

    - ByteArrayInputStream和 ByteArrayOutputStream:内存中的字节流操作。 - DataInputStream和DataOutputStream:用于读写基本数据类型的字节流。 四、字符流 字符流包括Reader和Writer,适用于处理Unicode字符。...

    IO流面试题共5页.pdf.zip

    9. **内存流**:ByteArrayInputStream和ByteArrayOutputStream可以在内存中创建字节流,方便数据的临时存储和处理。 10. **IO异常处理**:在使用IO流时,经常需要捕获IOException,这是所有IO异常的基类,包括文件...

    java高级特性 - io流.docx

    - **ByteArrayInputStream 和 ByteArrayOutputStream**:用于字节数组操作,例如从字节数组中读取数据或将数据写入字节数组。 - **BufferedInputStream 和 BufferedOutputStream**:用于缓冲操作,可以提高数据的...

    《JAVA_IO流学习总结》

    - ByteArrayInputStream和ByteArrayOutputStream允许在内存中创建字节流,适合小规模的数据操作。 八、网络流 - Socket和ServerSocket提供了网络通信的能力,相关的InputStream和OutputStream类用于在网络连接上...

    Java io输入输出流及字符集

    ByteArrayInputStream和ByteArrayOutputStream可以在内存中读写数据,无需实际的文件系统。 总结: Java的IO流系统提供了丰富的功能,包括各种类型的流、缓冲、字符集转换、对象序列化等。理解并熟练运用这些概念,...

    Android应用源码之IOStreamSample.zip

    - ByteArrayInputStream和 ByteArrayOutputStream:内存中的字节流,用于数据的临时存储。 - DataInputStream和DataOutputStream:提供了读写基本类型数据的能力,如int、float等。 2. **字符流**:Reader和...

    五,Android文件IO详解.doc

    - **内存流**:如ByteArrayInputStream和ByteArrayOutputStream用于在内存中处理数据。 - **字符串流**:StringReader和StringWriter用于字符串的读写。 - **管道流**:PipedInputStream和PipedOutputStream用于...

    Java_IO操作总结

    4. 内存操作流(如ByteArrayInputStream和ByteArrayOutputStream):这些流类用于在内存中操作数据,无需直接与文件交互,适合在程序内部进行数据传输。 5. 打印流(PrintStream和PrintWriter):打印流用于方便地...

Global site tag (gtag.js) - Google Analytics