1

我有通过长度标头前面的套接字发送的数据包。因此,每次传输都带有 4 个字节的长度信息,然后是数据包。因此,我必须限制我read()的永远不要超过长度,以免我不小心读取到下一个数据包。

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

这是我想出的:

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

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

4

1 回答 1

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);
于 2013-11-18T01:59:29.837 回答