Что это значит, когда DataInputStream продолжает возвращать 0? - PullRequest
0 голосов
/ 08 июня 2010

У меня есть DataInputStream, созданный из Socket в Java. Подключение к простому веб-серверу, который использует кодирование передачи по частям. Веб-сервер фактически работает в обычном браузере. Но в моей программе я пытаюсь читать, я читаю первые первые байты (около 5 КБ данных). Но каждое чтение после этого возвращает 0 байтов чтения. Разве он не должен блокироваться, пока не сможет прочитать?

Примечание: обычно этого не происходит. Проблема с сервером, к которому я подключаюсь.

Кроме того, этот код здесь все возвращает false даже после байтового чтения == 0.:

.
        System.out.println(socket.isClosed());
        System.out.println(socket.isInputShutdown());
        System.out.println(socket.isOutputShutdown());

А вот соответствующие заголовки:

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 ]

1 голос
/ 08 июня 2010

В соответствии с http://java.sun.com/j2se/1.4.2/docs/api/java/io/DataInputStream.html#read(byte[]) возможно и допустимо, чтобы DataInputStream возвращал 0. Это не должно быть проблемой, так как вы должны проверять -1 для конца потока.

0 голосов
/ 08 июня 2010

Вы правы, InputStream никогда не должен возвращать 0 при чтении. Он должен либо блокироваться, пока не будет доступен байт, либо возвращать -1, что указывает на EOF.

Есть ли у вас шанс предоставить тестовый пример? Я видел ошибку, подобную этой раньше.

...