当DataInputStream保持返回0时,它意味着什么?

时间:2010-06-08 15:29:03

标签: java http network-protocols

我有一个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

2 个答案:

答案 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