有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有通过socket发送的数据包,这些socket前面有长度头。因此,每次传输都有4字节的长度信息,然后是数据包。因此,我必须限制我的read()不超过长度,这样我就不会意外地读取行中的下一个数据包

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

以下是我的想法:

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

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


共 (1) 个答案

  1. # 1 楼答案

    将输入流包装在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);