[英]Exactly what read/block guarantees does DataInputStream provide following available()
[英]What does it mean when a DataInputStream keeps returning 0?
我有一個DataInputStream
,它是用Java中的一個Socket
創建的。 該連接是使用分塊傳輸編碼的簡單Web服務器。 Web服務器實際上可以在普通瀏覽器中工作。 但是在我的程序中,我試圖讀取,我讀取了第一個頭字節(大約5kb的數據)。 但是此后的每次讀取都返回讀取的0字節。 它不應該阻塞直到它可以讀取嗎?
注意:這通常不會發生。 問題出在我連接的服務器上。
同樣,即使在bytesread == 0之后,此代碼也都返回false:
System.out.println(socket.isClosed());
System.out.println(socket.isInputShutdown());
System.out.println(socket.isOutputShutdown());
這是resp標頭:
HTTP/1.1 200 OK
Date: Tue, 08 Jun 2010 14:01:01 GMT
Server: Apache/2.2.11 (Unix) PHP/5.2.10
X-Powered-By: PHP/5.2.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
根據http://java.sun.com/j2se/1.4.2/docs/api/java/io/DataInputStream.html#read(byte []) ,DataInputStream返回0是可能且有效的。這應該沒問題,因為您應該在流的末尾測試-1。
沒錯,InputStream永遠不應在讀取時返回0。 它應該阻塞直到一個字節可用為止,或者返回-1表示EOF。
您有機會提供測試用例嗎? 我以前見過這樣的錯誤 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.