从输入流中读取有限长度的最佳实践

时间:2013-11-18 01:52:33

标签: java java-8 java-stream

我有通过套接字发送的数据包,前面是长度标头。因此,每个传输都带有4个字节的长度信息,后跟数据包。因此,我必须将read()限制为永远不会超过长度,这样我就不会意外地读取下一个数据包。

InputStream in是输入流,ByteArrayOutputStream byteStream是我写入传入数据包的流,int len是传入传输的长度。

以下是我提出的建议:

for (int i = 0; i < len; i++) {
    byteStream.write(in.read());
}

这绝对是可怕的;逐个读取字节。我希望看看是否有更好的方法可以使用缓冲区(类似于复制流的规范方式)。

1 个答案:

答案 0 :(得分:0)

将输入流包装在DataInputStream中,然后使用readInt()和readFully()方法获取数据的大小和字节。

int len = dis.readInt();
// assuming relatively small byte arrays, use smarter logic for huge streams....
byte[] buffer = new byte[len];
dis.readFully(buffer);
byteStream.write(buffer);
相关问题