parisisalvo
07-11-2007, 10:56
La scrittura/lettura di oggetti tramite ObjectOutputStream e ObjectInputStream funzionano bene SE il FileOutputStream che definisco ha il flag append = FALSE!
Se il FileOutputStream(F,true) lo dichiaro con modalità di append non funziona più nulla a partire dalla seconda sessione di scrittura!
Es.
Prima sessione di scrittura, sullo stream scrivo 10oggetti.
Chiudo. Apro e leggo: tutto perfetto!
Seconda sessione di scrittura, sullo stream scrivo 5 oggetti.
Chiudo.Apro e leggo: i primi 10 li leggo (appartenenti alla prima sessione), dall'11esimo in poi ho un invalid type code: AC! Sicuramente dovuto all'uso di header all'apertura del file in scrittura.
Tra l'altro mi sono accorto che lui scrive gli oggetti successivi al primo in una forma compatta.
Che metodo posso utilizzare per ovviare a questo problema (gli oggetti che scrivo sono di dimensione variabile).
Io avevo pensato a scrivermi delle librerie mie, con un mio standard del tipo : length data - length data - length data.
La lenght fissa a 5byte (cosi' da avere oggetti di size max a 99999byte e poi subito attaccato l'oggetto.
In lettura avrò quindi un "parser" che legge 5byte fissi, da questi estrae il numero x di byte da leggere e legge i successivi x byte. Dovrebbe funzionare, anche se mi sembra troppo macchinoso!!
Se il FileOutputStream(F,true) lo dichiaro con modalità di append non funziona più nulla a partire dalla seconda sessione di scrittura!
Es.
Prima sessione di scrittura, sullo stream scrivo 10oggetti.
Chiudo. Apro e leggo: tutto perfetto!
Seconda sessione di scrittura, sullo stream scrivo 5 oggetti.
Chiudo.Apro e leggo: i primi 10 li leggo (appartenenti alla prima sessione), dall'11esimo in poi ho un invalid type code: AC! Sicuramente dovuto all'uso di header all'apertura del file in scrittura.
Tra l'altro mi sono accorto che lui scrive gli oggetti successivi al primo in una forma compatta.
Che metodo posso utilizzare per ovviare a questo problema (gli oggetti che scrivo sono di dimensione variabile).
Io avevo pensato a scrivermi delle librerie mie, con un mio standard del tipo : length data - length data - length data.
La lenght fissa a 5byte (cosi' da avere oggetti di size max a 99999byte e poi subito attaccato l'oggetto.
In lettura avrò quindi un "parser" che legge 5byte fissi, da questi estrae il numero x di byte da leggere e legge i successivi x byte. Dovrebbe funzionare, anche se mi sembra troppo macchinoso!!