Originariamente inviato da andbin
Ok. Supponendo che il file sia scritto in un charset "single byte" (altrimenti il discorso non è più valido), tecnicamente si può usare RandomAccessFile per fare quello che chiedi.
Tenendo però presente che
non devi usare readChar() e writeChar()/writeChars(). Perché se leggessi la documentazione vedresti che dice che il carattere viene letto/scritto come 2 byte. E quindi sarebbe corretto l'uso di questi metodi
solo se il charset del file fosse UTF-16 in Big Endian. E non è sicuramente il tuo caso ....
No, dovresti leggere dei byte, in cui presupponi l'equazione 1 byte=1 char. In RandomAccessFile il puntamento del file è 1 solo. Le operazioni di lettura/scrittura fanno "avanzare" il puntamento ovviamente. E lo puoi cambiare con seek().
Devi fare così: partendo dall'inizio, per ogni riga detto in generale:
a) Ti salvi il puntamento
b) Inizi a leggere byte x byte finché non trovi CR o LF (che non devi toccare) e li metti in un array in memoria
c) Trovato CR o LF inverti il tuo buffer in memoria
d) Ti salvi il puntamento
e) Sposti il puntamento preso al punto a)
f) Scrivi N byte (lo sai a priori quanti!) del buffer che hai già invertito
g) Salti i CR/LF
h) Ripeti dal punto a)