簡體   English   中英

從Java套接字(TCP)讀取19000字節

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM