[英]read 19000 bytes from java socket(TCP)
这是我的简化代码
sock.getOutputStream().write(buff); //send a readRequest
byte[] rbuff = new byte[19210]; //Answer has 19210 bytes of data
sock.getInputStream().read(rbuff);
在Wireshark中,我看到它被分成几个tcp包。 但是,是否不应等到19210字节就已到达读取等待时间?
我得到了数据,但是从某个位置开始,所有字节均为0。这几乎是相同的位置,但略有不同。
知道我在这里做错了什么吗?
您可以尝试像这样大块读取它:
ByteArrayOutputStream b= new ByteArrayOutputStream();
byte[] buf = new byte[1024];
while (count = in.read(buf)) > 0)
{
b.write(buf,0,n);
}
byte data[] = b.toByteArray();
只需研究Inputstream.read()
的Javadoc:
“从输入流中读取一定数量的字节并将其存储到缓冲区数组b中。实际读取的字节数将以整数形式返回。”
含义: read()
不会等待,直到它有足够的字节来填充缓冲区。 它可以填充一些字节已经很高兴了。 因此,您必须检查返回的号码。 并循环直到收集到所需的所有字节为止。 换句话说:不要提供大小为19K的缓冲区; 使用较小的 然后将收到的字节复制到另一个数据结构中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.