我有通过套接字发送的数据包,前面是长度标头。因此,每个传输都带有4个字节的长度信息,后跟数据包。因此,我必须将read()
限制为永远不会超过长度,这样我就不会意外地读取下一个数据包。
InputStream in
是输入流,ByteArrayOutputStream byteStream
是我写入传入数据包的流,int len
是传入传输的长度。
以下是我提出的建议:
for (int i = 0; i < len; i++) {
byteStream.write(in.read());
}
这绝对是可怕的;逐个读取字节。我希望看看是否有更好的方法可以使用缓冲区(类似于复制流的规范方式)。
答案 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);