我正在使用Java的BufferedInputStream
类读取发送到套接字的字节。
发送到套接字的数据是 HTTP 形式,因此通常是具有定义的内容长度的标头,然后是一些内容。
我遇到的问题是有时BufferedInputStream.read()
不会读取发送给它的全部数据量。它返回读取的字节数,但这比发送的字节数少得多。我已经验证了使用 Wireshark 发送的字节,并且可以确认正在传输完整的消息。)
示例代码如下:
BufferedInputStream inFromClient = new BufferedInputStream(socket.getInputStream());
int contentLength = getContentLengthFromHeader();
byte[] b = new byte[contentLength];
int bytesRead = inFromClient.read(b, 0, contentLength);
有时 read() 完成后bytesRead
等于contentLength
但在其他情况下 read() 似乎没有读到内容的末尾。
有人对正在发生的事情有任何想法吗? Java 是否缓冲输出?有更好的从套接字读取的方法吗?
你假设read()
填充缓冲区。检查 Javadoc。它至少传输一个字节,仅此而已。
你不需要一个大的缓冲区和一个BufferedInputStream.
将后者更改为DataInputStream.readFully().
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)