Originariamente inviato da Davdx
scusami non ti seguo, per effettuare un append su un file esistente non credo ci sia bisogno di leggere il file e ricrearlo, se il file esiste, lo si apre con il boolean true (ovvero in append) altrimenti lo si apre in scrittura... il problema è nel leggerlo perchè se scriviamo degli oggetti diversi dovremmo fare un seek di n oggetti prima di leggere quello che ci interessa... ma probabilmente mi sfugge qualcosa
Ti sfugge quello che ho detto, che evidentemente non l'ho detto bene:
La creazione dell'ObjectOutputStream scrive nel file un header
e
Aprire in append con ObjectOutputStream un file precedentemente creato con lo stesso oggetto, risulta nell'aggiunta, alla fine del file, di un secondo header
Quindi, nel momento in cui creo un file pippo contenente degli oggetti serializzati, ottengo questo:
codice:
header_creato_da_ObjectOutputStream
Oggetto1
Oggetto2
...
OggettoN
Se lo riapro in scrittura (ObjectOutputStream) in append, e ci scrivo altri due oggetto, ottengo questo:
codice:
header_creato_da_ObjectOutputStream
Oggetto1
Oggetto2
...
OggettoN
header_creato_da_ObjectOutputStream
OggettoN+1
OggettoN+2
Il file è corrotto (c'è un secondo header, che non dovrebbe esserci!).
Per questo, se si stanno usando dei file contenenti oggetti serializzati, non si può usare l'append. Si deve aprire il file in lettura, deserializzare tutti gli oggetti, chiudere il file, ricrearlo (senza append), riscrivere tutti gli oggetti precedentemente letti e poi aggiungere quelli nuovi.
Ciao.