我有一个DataInputStream
,是用Java中的Socket
创建的。连接是使用分块传输编码的简单Web服务器。实际上,Web服务器在普通浏览器中工作。但是在我的程序中,我试图读取,我读取了第一个字节(大约5kb的数据)。但每次读取后返回0字节读取。是不是应该阻止它才能读取?
注意:通常不会发生这种情况。问题出在我连接的服务器上。
此外,这里的代码都返回false,即使在bytesread == 0。:
之后 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
答案 0 :(得分:1)
根据http://java.sun.com/j2se/1.4.2/docs/api/java/io/DataInputStream.html#read(byte[]),DataInputStream返回0是可能且有效的。这应该不是问题,因为你应该在流的末尾测试-1。
答案 1 :(得分:-1)
你是对的,一个InputStream永远不应该在读取时返回0。它应该阻塞直到一个字节可用,或者返回-1表示EOF。
您是否有机会提供测试用例?我之前见过bug like this。