从输入流读取有限长度的java最佳实践
我有通过socket发送的数据包,这些socket前面有长度头。因此,每次传输都有4字节的长度信息,然后是数据包。因此,我必须限制我的read()
不超过长度,这样我就不会意外地读取行中的下一个数据包
InputStream in
是输入流,ByteArrayOutputStream byteStream
是我将传入数据包写入的流,int len
是传入传输的长度
以下是我的想法:
for (int i = 0; i < len; i++) {
byteStream.write(in.read());
}
这是绝对可怕的;逐个读取字节。我希望看看是否有更好的方法使用缓冲区来实现这一点(有点类似于复制流的标准方法)
# 1 楼答案
将输入流包装在DataInputStream中,然后使用readInt()和readFully()方法获取数据的大小和字节