[JAVA] Limite du BufferedReader ?

Limite du BufferedReader ? [JAVA] - Java - Programmation

Marsh Posté le 03-03-2005 à 13:11:15    

Bonjour à tous, j'ai un petit soucis lorsque je lis un ppm (en gros un fichier ascii représentant des triplets RGB et donc une image)
 
Le code suivant (simplifié à outrance) ne lit pas tout mon fichier, il s'arrête en plein dedans.
 
Bon dans le code qui suit ca manque de "fiabilité" pour les premiers readline, mais c'est pas le sujet ;)
 
Ce que fait ce code : il recopie sur un terminal les lignes du fichier, sauf qu'à un moment, vers les lignes 2650-2700, on sort du while et le prog se termine.
Le fichier n'a rien d'anormal à cet endroit (pas de caractères spéciaux, lignes identiques à ce qui précède et à ce qui suit)
 
 
 

Code :
  1. public void loadPPM(File file) throws Exception {
  2.     BufferedReader br = new BufferedReader(new FileReader(file));
  3.     StringTokenizer tokenizer;
  4.     String l = br.readLine();
  5.     //P3 : XXX
  6.     if (l.equals("P3" )) {
  7.         //Coordonnée du pixel courant
  8.         int x = 0;
  9.         int y = 0;
  10.         // On lit la première ligne ici après "P3"
  11.         l = br.readLine();
  12.         // On ignore les commentaires
  13.         while (l.substring(0,1).equals("#" )) {
  14.             l = br.readLine();
  15.         }
  16.         // Ici l est donc la première ligne UTILE
  17.         // On récupère la taille de l'image
  18.         tokenizer = new StringTokenizer(l, " " );//XXX portable?
  19.         String widthString = tokenizer.nextToken();
  20.         String heightString = tokenizer.nextToken();
  21.         int width = Integer.parseInt(widthString);
  22.         int height = Integer.parseInt(heightString);
  23.         System.out.println("XXXXXX : " + width + "  " + height);
  24.         // On peut créer la buffered image (sans transparence)
  25.         bfi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  26.         //On récupère la valeur max : XXX
  27.         l = br.readLine();
  28.         //Maintenant qu'on commence le traitement des lignes il faut :
  29.         //  récupèrer un triplet
  30.         //  afficher son pixel correspondant
  31.         //  etc...
  32.         //Pour stocker le triplet en cours de traitement
  33.         int[] rgb = new int[3];
  34.         while( (l=br.readLine()) != null && !l.equals("" ) ) {
  35.             System.out.println("in ze while : "+x+" "+y+"  : "+l);
  36.             // CODE COMMENTE CAR GROS ET INUTILE
  37.             // (ici x et y sont incrémentés)
  38.         }
  39.     }
  40.     // Pas "P3"
  41.     else {
  42.         return;
  43.     }
  44. }


 
 
Si qqun a une idée pour lire le fichier en entier, ca m'intéresse
Merci d'avance ;)


Message édité par Xavier_OM le 03-03-2005 à 13:22:01

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 03-03-2005 à 13:11:15   

Reply

Marsh Posté le 03-03-2005 à 13:27:24    

T'aurais pas une ligne vide vers les lignes 2650-2700???

Reply

Marsh Posté le 03-03-2005 à 13:28:11    

djok_fb a écrit :

T'aurais pas une ligne vide vers les lignes 2650-2700???


 
Ben comme je l'ai dis, jme suis rendu à l'endroit "problématique", et plus normal que ca tu meurs :/
 
 
EDIT : ca disparait si je passe le PPM en jpeg, puis en PPM
EDIT : vimdiff ne voit aucune différence (et j'affiche TOUS les caractères spéciaux) à cet endroit
 
 
 :??:


Message édité par Xavier_OM le 03-03-2005 à 13:35:34

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 03-03-2005 à 17:05:44    

T'as pas de break dans ta boucle?
 
 
while( (l=br.readLine()) != null && !l.equals("" ) )
Java t'a pas jeté à la compil pour ton test pas très bien parenthésé?
Moi, pour plus de sureté, j'aurais fait ça:
while( ((l=br.readLine())!=null) && !l.equals("" ) )

Reply

Marsh Posté le 21-05-2005 à 23:19:37    

salut j'ai essayé ton code mais avnat tout il me faut le programme presque entier ce qui m'aideras à mieux comprendre d'où est issu l'erreur

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed