这是我的简化代码
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.这个位置大多是相同的位置但是有点不同。
知道我在这里做错了吗?
答案 0 :(得分:3)
您可以尝试以这样的方式阅读它:
ByteArrayOutputStream b= new ByteArrayOutputStream();
byte[] buf = new byte[1024];
while (count = in.read(buf)) > 0)
{
b.write(buf,0,n);
}
byte data[] = b.toByteArray();
答案 1 :(得分:1)
只需研究Inputstream.read()
的Javadoc:
"从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。"
含义:<div ng-class="{'new': item.new}"></div>
不等到有足够的字节来填充缓冲区。当它可以填充某些字节时,它已经很开心了。因此,您必须检查返回的号码;并循环,直到您收集了所需的所有字节。换句话说:不提供大小为19K的缓冲区;使用较小的一个;和&#34;复制&#34;超过你收到的另一个数据结构的字节。