daiazu ha scritto:
Devo memorizare dati in un file .dat con dati già esistenti. Apro il file in modalità append (true)
Ecco, già qui è sbagliato. La serializzazione utilizza un protocollo binario ben preciso che prevede un "header" iniziale che viene scritto ad ogni creazione del ObjectOutputStream.
Se "appendi" ottieni:
[header][oggetti.....][header][oggetti.....]
Quando ObjectInputStream rilegge tutto da capo, ad un certo punto incontra il secondo header, che NON ci dovrebbe essere. E ritiene quindi che lo stream sia "sballato".
In senso generale, quindi, la serializzazione degli oggetti non è fatta per funzionare "in append".
daiazu ha scritto:
Voglio evitare di trasferire tutto in un vettore per ritrasferirlo successivamente nel file. E' possibile?
In generale, no. La cosa più semplice è appunto quella di leggere tutto e tenerlo in memoria in una appropriata "collezione", quindi si modifica la collezione e infine si riscrive il tutto su file.
Dipende quali sono i tuoi obiettivi .... se è una applicazione "didattica", non credo ci siano problemi in tal senso (e nemmeno di "performance") a meno di imposizioni/restrizioni specifiche.
Se è per altro .... precisa.
Se invece andiamo nei dettagli di ObjectOutputStream, sappi che quel header viene scritto da un metodo di ObjectOutputStream che si chiama writeStreamHeader() e questo metodo è marcato protected, quindi ridefinibile .....