2010-02-20 6 views
0

J'ai écrit ce client NNTP ... et j'essaie de l'utiliser dans le cadre d'un projet plus important, mais il semble que le downloadArticle (chaîne msgID) est télécharger des octets supplémentaires, mais de manière aléatoire. Par exemple, une fois que je vais exécuter l'application et il va insérer 3 ordures après un CR/LF. Je réexécuterai l'application et ne téléchargera pas ces octets. J'ai isolé le problème et ce n'est pas dans le décodeur yenc etc ... c'est définitivement dans cette classe NNTPclient.Client NNTP - Java - Téléchargement L'article est téléchargé 3 octets de déchets supplémentaires au hasard

J'ai posté toute la classe pour l'exhaustivité. Le code est ici: http://www.pastebin.com/m214131cc

+0

Vous devriez vraiment vérifier tous vos appels nntpreader.read(). Vous lisez d'une socket, vous n'êtes pas garanti de lire le non. des octets que vous avez définis comme taille de la mémoire tampon. – nos

+0

pourquoi ne pas utiliser la bibliothèque [GNU] (http://www.gnu.org/software/classpathx/javamail/)? Ou, au moins le fourche si vous ne l'aimez pas :) – Thufir

Répondre

1

Vous avez beaucoup de logique complexe et donc sujette aux erreurs concernant les retours à la ligne - l'erreur est presque certainement quelque part là-dedans. Vous semblez aussi être en utilisant une contradiction (et mélanger de manière incompatible nommé In/OutputStreams et lecteurs/rédacteurs

La question est:. Est-ce que vous avez réellement besoin tout ce que je suis sûr que vous ne le faites pas? Tout ce que cette classe semble faire est d'écrire le contenu d'un InputStream dans un fichier .Pour cela, vous n'avez pas besoin de penser à newlines (ou, en effet, caractères) - juste transférer les octets bruts via un tampon byte[] (ou simplement utiliser la classe de commons-io Apache IOUtils).

Ou si vous avez besoin de normaliser les sauts de ligne, utilisez BufferedReader.readLine() au lieu d'écrire votre propre logique de reconnaissance de nouvelle ligne sujette à erreur.