[英]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.