【发布时间】:2014-02-01 20:22:13
【问题描述】:
我正在使用 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缓冲输出吗?有没有更好的从套接字读取的方法?
【问题讨论】:
标签: java sockets http bufferedinputstream