ciao,
esiste un metodo per spostarsi in una determinata linea dello stream senza dover leggere tutte le precedenti con il metodo readline?
ciao,
esiste un metodo per spostarsi in una determinata linea dello stream senza dover leggere tutte le precedenti con il metodo readline?
No, non c'è. Detto in generale, se le righe sono di lunghezza diversa, come potresti sapere a priori l'offset nel file di una qualunque riga N??Originariamente inviato da __Aless#ndro###
esiste un metodo per spostarsi in una determinata linea dello stream senza dover leggere tutte le precedenti con il metodo readline?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ciao,
le righe sono tutte della stessa lunghezza, ho un file formattato in una certa maniera
Se le righe sono tutte di lunghezza uguale e conosci come è il newline (CR o CR+LF o LF) che ovviamente deve essere tale per tutte le righe, allora sì, un offset in teoria si potrebbe calcolare. Ho detto in teoria perché c'è un'altra questione: quale è il charset del file?? Se è un charset in cui per ogni carattere hai un numero fisso di byte es. 1 o 2 ecc.., allora è un conto. Se fosse UTF-8 o altri charset con codifica a lunghezza "variabile", ovviamente no, non puoi farlo in linea generale se non sai a priori cosa contiene il file.Originariamente inviato da __Aless#ndro###
le righe sono tutte della stessa lunghezza, ho un file formattato in una certa maniera
E quindi ammesso di poter calcolare un offset che sia valido/consistente, c'è ancora un'altra questione: con quale classe lo leggi? Non certo con gli InputStream e nemmeno con i Reader, in quando sono tutti ad accesso "sequenziale". Esiste RandomAccessFile che permette un accesso "casuale" ma c'è anche qui una questione: RandomAccessFile non ha alcuna nozione di "charset", insomma non tratta "caratteri" in un qualunque charset. Ha un metodo readLine() ok ma è limitato, in quanto stabilisce fisso 1 byte -> 1 char, pertanto va bene solo se il file è in un charset single-byte come ISO-8859-1 o ASCII, ad esempio.
Se hai un file in ASCII o ISO-8859-1 e ti basta usare readLine() di RandomAccessFile, allora bene, usalo pure.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet