Quote Originariamente inviata da giuseppe500 Visualizza il messaggio
1)lavoro in android e vado a caricare il mio file da un url web, e il processo è gestito da una libreria che crea un thread a parte e lavora in modo asincrono è per questo che ho pensato al thread safe, o non centra nulla comunque?
La libreria l'ho postata nel thread preecedente
Non centra comunque nulla. Come ho detto prima, il tuo StringBuffer è una variabile locale, se anche più thread eseguissero quel tuo pezzo di codice, ogni thread avrebbe il suo StringBuffer. Non c'è condivisione = nessun problema di concorrenza.
Tra StringBuffer e StringBuilder ti conviene però quest'ultimo. E ripeto, non per problemi di "concorrenza" ma perché la istanza di StringBuffer pur essendo usata da un solo thread, richiede comunque l'acquisizione di un "lock" (StringBuffer è synchronized) mentre StringBuilder no.

Quote Originariamente inviata da giuseppe500 Visualizza il messaggio
2)il file puo arrivare ad essere anche 20MB e di questo file devo fare un parsing come posso fare tutto nel modo piu sicuro possibile?al limite anche salvando il file e riaprendolo; E' meglio spezzare la lettura in blocchi di stringhe e fare il pharsing di questo? devo infatti ricercare delle sottostringhe nel file, le sottostringhe sono di questo genere : (è il dump di solo dati di un db mysql)

insert into(a,b,c) values(1,2,3);
insert into(a,b,c) values(4,5,6);
insert into(a,b,c) values(7,8,9);


3)alla fine forse la cosa migliore è leggere il file linea per linea , o c'è qualcosa di possibilmente piu veloce?

grazie.
ps.
in questo modo funziona:
codice:
     Reader      reader      = new InputStreamReader(zin, "UTF-8");
                  
                  int data = reader.read();
                  while(data != -1){
                      buff.append((char) data);
                      data = reader.read();
                  }

                  String str = buff.toString();
ma è estremamente lento.
Io infatti avevo detto "leggere a blocchi di char e buttarli nel StringBuffer". Non 1 char per volta (che ovviamente è molto meno performante).

Comunque se devi fare il parsing di ciascuna riga per volta (cioè non c'è una qualche connessione tra più righe), allora leggi "a righe":
zin -> InputStreamReader -> BufferedReader