Bonjour,
j'ai créé une classe qui gère des fichiers tabulés et elle fonctionne très bien. Là où je rencontre un problème, c'est avec la méthode qui écrit le contenu du fichier. Jusqu'à présent, j'avais surchargé la méthode toString et utilisé un StringBuffer, afin que la méthode me renvoit le contenu du fichier sous forme de chaîne de caractère :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 /** On surcharge la methode pour qu'elle renvoit le contenu du fichier tabule sous forme de chaine de caractere. * @return Le fichier sous forme de chaines.*/ public String toString() { int i, j ; StringBuffer sb = new StringBuffer() ; for (i=0 ; i < Largeur-1 ; i++) sb.append("\"" + NomColonnes[i] + "\"" + Separateur) ; sb.append("\"" + NomColonnes[Largeur-1] + "\"\n") ; for (i=0 ; i < Hauteur ; i++) { for (j=0 ; j < Largeur-1 ; j++) switch ( TypeColonnes[j] ) { case INTEGER : sb.append(((int[])Tableau[j])[i] + Separateur) ; break ; case DOUBLE : sb.append(((double[])Tableau[j])[i] + Separateur) ; break ; case STRING : sb.append(((String[])Tableau[j])[i] + Separateur) ; break ; case INCONNU : sb.append("FichierTabuleSemiObjet.INCONNU" + Separateur) ; break ; default : throw new Error("Type de colonne invalide : " + TypeColonnes[j]) ; } switch ( TypeColonnes[Largeur-1] ) { case INTEGER : sb.append(((int[])Tableau[Largeur-1])[i] + "\n") ; break ; case DOUBLE : sb.append(((double[])Tableau[Largeur-1])[i] + "\n") ; break ; case STRING : sb.append(((String[])Tableau[Largeur-1])[i] + "\n") ; break ; case INCONNU : sb.append("FichierTabuleSemiObjet.INCONNU" + "\n") ; break ; default : throw new Error("Type de colonne invalide : " + TypeColonnes[Largeur-1]) ; } } return sb.toString() ; }
Ce morceau de code fonctionne très bien, mais pour les gros fichiers, j'ai une jolie erreur "java.lang.OutOfMemoryError: Java heap space". Donc j'en déduis que le buffer est plein.
Je sais que je pourrais écrire mon fichier directement dans le fichier sortie sans utiliser un StringBuffer et ainsi résoudre mon problème. Donc j'ai une solution à mon problème.
Mais en étant honnête, j'aime bien le fait de surcharger la méthode toString et d'utiliser un StringBuffer. Alors j'aurai voulu savoir si vous aviez des solutions pour résoudre ce problème en gardant ma méthode...
Merci par avance.
Partager