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;
分享到:
相关推荐
今天我们要深入学习的是Java中的两个重要类:ByteArrayInputStream和ByteArrayOutputStream,它们属于Java.io包,是处理内存中字节数组的流对象。 ByteArrayInputStream是InputStream的一个子类,它允许我们从字节...
位元串流还包括SequenceInputStream、PrintStream、ByteArrayInputStream和ByteArrayOutputStream等。字元串流如Reader和Writer处理字符流,例如InputStreamReader和OutputStreamWriter,FileReader和FileWriter,...
- ByteArrayInputStream 和 ByteArrayOutputStream 分别用于内存中的字节输入和输出。 - FilterInputStream 和 FilterOutputStream 提供了过滤和装饰流的功能,可以添加额外的处理逻辑。 - DataInputStream 和 ...
字节流以字节为单位进行数据传输,主要由InputStream和OutputStream家族构成,例如FileInputStream和FileOutputStream用于文件操作,ByteArrayInputStream和ByteArrayOutputStream则用于内存中的字节数组。...
2. ByteArrayInputStream和ByteArrayOutputStream:在内存中操作字节数组。 3. InputStreamReader和OutputStreamWriter:将字节流转换为字符流,支持不同字符编码。 4. BufferedReader和BufferedWriter:提供缓冲...
ByteArrayInputStream和ByteArrayOutputStream则允许在内存中读写数据。 8.2 标准IO Java通过System类提供标准输入、输出和错误流,分别对应于System.in、System.out和System.err,它们都是InputStream或...
常用的节点流包括与文件操作相关的FileInputStream和FileOutputStream,以及处理内存数据的ByteArrayInputStream和ByteArrayOutputStream。处理流则包括BufferedInputStream、BufferedOutputStream、DataInputStream...
- **字节数组流**:ByteArrayInputStream和ByteArrayOutputStream用于在内存中操作字节数组。例如,可以通过ByteArrayOutputStream创建一个字节数组,然后通过ByteArrayInputStream读取该数组。 Java IO流体系结构...
除了基本的流,Java还提供了多种特定用途的流,如内存流(如ByteArrayInputStream和ByteArrayOutputStream)、字符串流(StringReader和StringWriter)、管道流(PipedReader和PipedWriter)以及文件流(FileReader...
此外,还有ByteArrayInputStream和ByteArrayOutputStream用于内存中的字节流操作,以及FilterInputStream和FilterOutputStream作为装饰者模式的实现,用于扩展和过滤字节流的功能。 字符流处理则是针对字符数据,如...
- ByteArrayInputStream和 ByteArrayOutputStream:内存中的字节流操作。 - DataInputStream和DataOutputStream:用于读写基本数据类型的字节流。 四、字符流 字符流包括Reader和Writer,适用于处理Unicode字符。...
9. **内存流**:ByteArrayInputStream和ByteArrayOutputStream可以在内存中创建字节流,方便数据的临时存储和处理。 10. **IO异常处理**:在使用IO流时,经常需要捕获IOException,这是所有IO异常的基类,包括文件...
- **ByteArrayInputStream 和 ByteArrayOutputStream**:用于字节数组操作,例如从字节数组中读取数据或将数据写入字节数组。 - **BufferedInputStream 和 BufferedOutputStream**:用于缓冲操作,可以提高数据的...
- ByteArrayInputStream和ByteArrayOutputStream允许在内存中创建字节流,适合小规模的数据操作。 八、网络流 - Socket和ServerSocket提供了网络通信的能力,相关的InputStream和OutputStream类用于在网络连接上...
ByteArrayInputStream和ByteArrayOutputStream可以在内存中读写数据,无需实际的文件系统。 总结: Java的IO流系统提供了丰富的功能,包括各种类型的流、缓冲、字符集转换、对象序列化等。理解并熟练运用这些概念,...
- ByteArrayInputStream和 ByteArrayOutputStream:内存中的字节流,用于数据的临时存储。 - DataInputStream和DataOutputStream:提供了读写基本类型数据的能力,如int、float等。 2. **字符流**:Reader和...
- **内存流**:如ByteArrayInputStream和ByteArrayOutputStream用于在内存中处理数据。 - **字符串流**:StringReader和StringWriter用于字符串的读写。 - **管道流**:PipedInputStream和PipedOutputStream用于...
4. 内存操作流(如ByteArrayInputStream和ByteArrayOutputStream):这些流类用于在内存中操作数据,无需直接与文件交互,适合在程序内部进行数据传输。 5. 打印流(PrintStream和PrintWriter):打印流用于方便地...