如標題所示,如果有更多的字節可用比緩衝區的大小,如果在第一次讀取一些字節被遺漏,可能DataInputStream.read()
覆蓋以前讀取的字節?將DataInputStream覆蓋連續讀取的字節
在對等體之間交換了固定大小的數據包,並且可能在Socket處有兩個數據包可用。 假設一個數據包的大小爲500,並且在套接字上有兩個總大小爲1000的數據包可用。此外,讓我們說,讀取400個字節的可用1000
的是它甚至可能
read()
不讀取所有500個字節,如果他們有哪些?當再次調用read時會發生什麼,是否有可能讀取超過100個字節?
這是不是真的清楚,我給出的Javadoc這種情況下會發生什麼:
的第一個字節讀取存儲到元素b [0],下一個進入B [1] , 等等。讀取的字節數最多等於b的長度。
我想知道下面的代碼塊是否應該修改,如註釋中所示,以便只讀取一個數據包。
while ((readBytes = stream.read(buffer)) != -1) {
totalBytes += readBytes;
if (totalBytes < buffer.length) { // must this be != instead of < ?
continue;
}
// all bytes are available
else {
break;
}
你的例子不清楚 - 你談論的是一個大小爲500的數據包和兩個大小爲1000的數據包,總共只有兩個數據包。 –
我的意思是,在讀取之前有1000個字節可用。緩衝區大小爲500,我想只讀取屬於第一個數據包的500個數據包。緩衝區是傳給讀取方法的byte []。 – John
我甚至不確定這種情況是否可能。由於我不清楚在閱讀時會讀取所有可用的字節。 – John