2010-08-12 16 views
12

Come posso scrivere molti oggetti serializzabili in un singolo file e quindi leggere alcuni oggetti come e quando necessario?scrittura di molti oggetti java in un singolo file

+0

Il problema completo: devo implementare un B-Tree. Vorrei creare un oggetto per ogni "nodo" e memorizzarlo nel file. Ora, quando sto usando l'albero b in seguito vorrei ottenere la radice e leggere solo i nodi desiderati. – Anupam

+0

Non hai detto perché lo faresti. La ragione per cui ti chiedo è che potresti essere erroneamente supponendo che questo sia più veloce o più efficiente in qualche modo quando è più probabile che sia compilato inutilmente. Se si dispone di alcuni 100 MB di dati, potrebbe iniziare a valerne la pena, altrimenti basta leggere l'intera struttura in memoria e accedervi. –

risposta

8

Si dovrebbe implementare l'aspetto di indicizzazione da soli, ma in caso contrario ciò potrebbe essere fatto. Quando serializzi un oggetto, in sostanza, recuperi uno OutputStream, che puoi indirizzare dove vuoi. Memorizzare più oggetti in un file in questo modo sarebbe semplice.

La parte difficile arriva quando si desidera leggere "alcuni" oggetti indietro. Come farai a sapere come cercare la posizione nel file che contiene l'oggetto specifico che vuoi? Se stai sempre leggendo gli oggetti nello stesso ordine in cui li hai scritti, dall'inizio del file in poi, questo non sarà un problema. Ma se vuoi avere un accesso casuale agli oggetti nel "mezzo" dello stream, dovrai trovare un modo per determinare l'offset di byte dell'oggetto specifico che ti interessa.

(Questo metodo non avrebbe nulla a che fare con la sincronizzazione o Java in sé, devi progettare uno schema che si adatti alle tue esigenze e all'ambiente.)

+1

Quindi per es. Scrivo '1',' 2', '3',' 4'. Dovrei leggerli come '4',' 3', '2',' 1'? Non ha senso per me leggerli di nuovo in '1',' 2', '3',' 4'. Potresti per favore chiarire? –

3

La parte di scrittura è semplice. Devi solo ricordare che devi scrivere tutti gli oggetti 'in una volta'. Non è possibile creare un file con oggetti serializzati, chiuderlo e aprirlo di nuovo per aggiungere altri oggetti. Se lo provi, riceverai messaggi di errore durante la lettura.

Per la deserializzazione, penso che devi elaborare il file completo e mantenere gli oggetti a cui sei interessato. Gli altri verranno creati ma raccolti da gc la prossima volta.

3

Fai Object[] per memorizzare i vostri oggetti. Ha funzionato per me.

Problemi correlati