2011-07-21 4 views
1

J'ai essayé de regarder autour pour le même problème, mais n'a pas pu trouver une solution qui ressemble à mon problème:java.io.EOFException: Fin inattendue du flux d'entrée ZLIB - lecture de HTTP

J'utilise la pièce de code suivante lu à partir HttpURLConnection:

public static BufferedReader getConnectionReader(HttpURLConnection con, String url) 
     throws Exception { 
    con = (HttpURLConnection) new URL(url).openConnection(); 
    con.connect(); 
    if (cm != null) { 
     cm.storeCookies(con); 
    } 
    if (con.getHeaderField("Content-Encoding") != null 
      && con.getHeaderField("Content-Encoding").equalsIgnoreCase("gzip")) { 
     return new BufferedReader(new InputStreamReader(new GZIPInputStream(con.getInputStream()))); 
    } else 
     return new BufferedReader(new InputStreamReader(con.getInputStream())); 
} 

la lecture est effectuée de la manière suivante:

HttpURLConnection con = null; 
reader = Utils.getConnectionReader(con, "http://www.site.com/page.html"); 
String line = null; 
while ((line = reader.readLine()) != null) { 
    log.info(line); 
} 

Parfois, je reçois l'exception mentionnée:

java.io.EOFException: Fin inattendue du flux d'entrée ZLIB

Quand je peux, j'attraper cette exception et recommencez l'opération - avec succès.

Le problème est que je ne sais pas ce qui provoque cette exception à pop. Cela arrive de manière assez aléatoire.

Je veux croire que c'est un problème de réseau.

Quelqu'un a trouvé un moyen de résoudre complètement ce problème?

Merci!

Répondre

0

La méthode que vous utilisez est moins qu'idéale pour les formats binaires comme GZip, je suppose que vous faites ça juste pour tester? En dehors de cela et du bogue avec HTTPURLConnection, il n'y a pas grand-chose d'autre dans le code qui pourrait causer le problème. Je recommande de lire en utilisant l'échange de tampon octet, au moins pour éliminer cela comme une source possible d'erreur.

+0

merci pour la réponse. J'utilise ce code pour lire des pages html - des pages de texte. la plupart ne sont pas compressés. Que voulez-vous dire à propos du bogue avec HttpUrlConnection ? merci encore. – tzafrir

+0

@tzafrir - vous déclarez une variable vide * con * et vous la passez dans votre fonction, où vous l'initialisez. Si vous avez l'intention d'utiliser cet objet * con *, notez qu'il ne sera pas initialisé lorsque le contrôle sortira de votre fonction, puisque Java est une valeur par défaut. Si toutefois vous n'avez pas l'intention de l'utiliser, alors il n'est pas nécessaire de le passer dans la fonction en premier lieu. – Perception

+0

merci, j'en suis conscient. il avait des raisons que je ne me souviens pas pour le moment .. – tzafrir

Questions connexes