2010-03-24 6 views
0

Je suis confronté à un problème très étrange où la même boucle continue à me donner différentes sorties différentes sur le changement de la valeur de TAMPONMême boucle donnant une sortie différente. Java IO

final int BUFFER = 100; 
     char[] charArr = new char[BUFFER]; 
     StringBuffer objStringBuffer = new StringBuffer(); 
     while (objBufferedReader.read(charArr, 0,BUFFER) != -1) { 
      objStringBuffer.append(charArr); 
     } 
objFileWriter.write(objStringBuffer.toString()); 

Lorsque je change la taille TAMPON 500 il me donne un fichier de 7 kb lorsque je change la taille de BUFFER à 100000 cela donne un dossier de 400 kb où le contenu est répété encore et encore. S'il vous plaît aider. Que dois-je faire pour éviter cela?

+0

'BUFFER' est un nom trompeur pour une variable qui spécifie la taille ** du tampon **. Vous devriez probablement l'appeler 'BUFFER_SIZE'. –

+0

Votre code ne semble pas être complet. Comment est défini objBufferedReader? – Riduidel

Répondre

6

Vous doit se rappeler la valeur de retour de l'appel read(), parce que read ne fait pas garantie qui a été rempli l'intégralité du tampon.

Vous devrez vous souvenir de cette valeur et l'utiliser dans l'appel d'ajout pour ajouter seulement autant de caractères.

Sinon, vous ajoutez des caractères non initialisé au StringBuffer qui ne viennent pas réellement du Reader (probablement soit 0 ou des valeurs écrites par read() précédents appels).

+0

+1 putain, vous étiez plus rapide :-) –

+0

Il y a une fonction StringBuffer à cet effet: append (char str [], int offset, int len) Et vous devriez utiliser StringBuilder d'ailleurs, si la synchronisation n'est pas nécessaire . – tigger

+0

Excellent travail! Merci Joachim. C'était vraiment rapide – TCM

Questions connexes