Newsgroup: it.comp.java
Titolo: Differenze tra BuffereReader e InputStreamReader...

Salve, io devo leggere da un file di testo riga per riga e estrarre il
contenuto per poi riscriverlo su un altro file, il problema sorge
quando tento di leggere il file. Se uso
in = new BufferedReader(new FileReader("file.txt"));
non vengono conservati i caratteri stranieri che questo file contiene
(tip o la o barrata scandinava) allora ho usato la codifica che
contiene l'inputStreamReader così:
in = new BufferedReader(new InputStreamReader( new
FileInputStream("file.txt"), "UTF-16"));
però in questo caso mi viene un errore di
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space,
ho tentato di guardare dov'è il problema e ho visto che il programma
non mi legge neanche la prima riga del file che ritorna subito
l'errore.
Premetto che il file è di 135 Mb, ho provato a postare la memoria
disponibile fino a 768 Mb, ma il risultato non cambia
Quello che non capisco è che se provo a farlo con un file di
dimensioni più piccole funziona perfettamente, se tento di farlo con
il file intero non mi esegue neanche la prima istruzione del While (per
leggere tutto il file) e cioè String line =in.readLine() appunto.
Dove sbaglio?
Grazie

Elbrethril ha scritto:
"...ho provato a postare la memoria disponibile fino a 768 Mb, ma il
risultato non cambia..."
Giusto per essere sicuri di ciò che hai scritto.
Cosa intendi per "postare la memoria"?
Cosa hai fatto effettivamente? Hai incrementato lo "heap memory size"
del server?
Usi tomcat, jboss, o cosa?
Scusa ma, maggiori informazioni sono necessarie!
Himgi

 Usi tomcat, jboss, o cosa?
Uso Eclipse 3.2, ho aumentato la memoria disponibile tramite il file
Eclipse.ini ho impostato
-vmargs
-Xms40m
-Xmx768m
ho provato anche a dividere il file in 2, e provare a fare la cosa
sequenziale, ma se provo con uno solo funziona, se li faccio tutti e
due no.

Prova ad usare questi parametri quando fai partire la JVM:
...-Xms256m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m
Xms --> minimum total heap size
Xmx --> maximum total heap size
-XX:PermSize --> sostanzialmente e' la memoria usata dalla JVM per fare
load ed unload delle classi e risorse che gli servono. GC.
-XX:MaxPermSize --> Come sopra ed indica la memoria massima.
Himgi
Elbrethril ha scritto:


 -XX:MaxPermSize --> Come sopra ed indica la memoria massima.
Ma se io uso Windows?

Già!
Prova allora quest'ultima cosa!
Imposti il paramentro Xss, che riguarda la memoria dello stack per
ciascun thread.
-Xss1024k
KAPPA e non MEGA
E se ancora non va... utilizza questo parametro:
-XX:AggressiveHeap
anche se questo parametro non andrebbe usato se non in casi particolari
con multiprocessore!
Himgi
Elbrethril ha scritto:


 -XX:AggressiveHeap
No mi fa neanche aprire Eclipse. dice che c'è un errore nella JVM.

Mizca!
Ho finito le risposte...
Ultima cosa, prova a specificare nel costruttore del BR il size
assegnandogli 256 mega.
in = new BufferedReader(new InputStreamReader( new
FileInputStream("file.txt"), "UTF-16"), size256Mega);
Altrimenti non saprei, forse sbagli altro... controlla le cose +
banali...
la tua istanza del BR non è null?
bhè no altrimenti avresti un bel nullpointerexc...
In UTF-8 te lo legge tutto?
giusto per sapere, lo se che non ti prende i caratteri vikinghi,
spagnoli e russi!
Himgi
Elbrethril ha scritto:


 assegnandogli 256 mega.
Ho provato ma non mi compila perchè dice che non riconosce
size256Mega..
Mi sa che mi hai dato un aiuto (anche se non so come metterlo in
pratica) con la codifica UTF-8 il programma compila tranquillamente...
Non so più dove picchiare la testa, perchè ovviamente in questo modo
perdo la codifica che mi serve...

 perdo la codifica che mi serve...
Anzi no, ho riprovato con il file originale e funziona tutto... anche
la codifica è mantenuta!!
Grazie mille non sai quanto mi sei stato di aiuto!
(Se avessi provato prima avrei risparmiato una settimana di lavoro!)
Simone

size256Mega e' il nome della variabile!
int size256Mega = 1024*1000*256;
Elbrethril ha scritto:


Come è andata a finire?
Elbrethril ha scritto:
