gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:16 26 4
gpt4 key购买 nike

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

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

这是我的想法:

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

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

最佳答案

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

关于java - 从输入流读取有限长度的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20038779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com