J'ai un DataInputStream
, créé à partir d'un Socket
en Java. La connexion est à un serveur Web simple qui utilise un codage de transfert en bloc. Le serveur web fonctionne en effet dans un navigateur normal. Mais dans mon programme, j'essaye de lire, j'ai lu les premiers premiers octets (environ 5kb de données). Mais chaque lecture après cela renvoie 0 octets lus. N'est-il pas censé bloquer jusqu'à ce qu'il puisse lire?Qu'est-ce que cela signifie quand un DataInputStream continue à renvoyer 0?
Remarque: Cela ne se produit généralement pas. Le problème est avec le serveur auquel je me connecte.
En outre, ce code ici toutes les fausses déclarations, même après l'bytesRead == 0 .:
System.out.println(socket.isClosed());
System.out.println(socket.isInputShutdown());
System.out.println(socket.isOutputShutdown());
Et voici les en-têtes 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
Faut-il supposer que vous voulez dire 'ByteArrayInputStream' plutôt que' ByteInputStream'? – Powerlord
Désolé complètement. En fait, c'est DataInputStream! – Zombies
C'est étrange ... les méthodes de lecture de 'DataInputStream' * devraient * bloquer. La raison que j'ai posée est parce que 'ByteArrayInputStream' semble être l'exception à la règle sur le blocage des lectures (il ne bloque jamais). – Powerlord