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
risposta
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.)
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? –
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.
Vorrei usare uno Flat File Database (ad esempio Berkeley DB Java Edition). Basta scrivere i nodi come righe di una tabella come:
Node
----
id
value
parent_id
Fai Object[]
per memorizzare i vostri oggetti. Ha funzionato per me.
- 1. Scrittura su un file temporaneo in java
- 2. Scrittura su un singolo file da più thread in ruby
- 3. scrittura su un file XML in Java
- 4. Scrittura Java in un file cancellato
- 5. Converti JSON molti oggetti a singolo JSON utilizzando Jackson
- 6. Tentativo di sincronizzare un sistema di scrittura file in java
- 7. Multithreading Java che legge un singolo file di grandi dimensioni
- 8. scrittura di un file csv utilizzando Buffered writer in Java
- 9. codeblocks, progetto singolo, molti eseguibili
- 10. Java: file CSV in lettura e scrittura
- 11. java - scrittura atomica di due file
- 12. Combinare più file .RData contenenti oggetti con lo stesso nome in un singolo file .RData
- 13. Scrittura di un lettore RSS in Java
- 14. Scrittura di file su HDFS utilizzando Java
- 15. Conversione di file flat in oggetti Java
- 16. Java - Come compilare un singolo file con Java Eclipse
- 17. Django - recupera oggetti da un campo molti a molti
- 18. Scala: più oggetti e classi in un singolo file o ogni oggetto/classe il proprio file
- 19. Oggetti di scrittura PHP in linea
- 20. Controllare in un singolo file in Git?
- 21. MATLAB - scrittura immagine in un file eps
- 22. scrittura di una matrice in un singolo file txt con mpi
- 23. Perché scrivere molti piccoli array di byte in un file è più veloce della scrittura di un grande array?
- 24. Scrittura di JSONObject in un file
- 25. Scrittura di file in bit in un file in C
- 26. Lettura e scrittura su file di testo in java
- 27. Scrittura simultanea di file in Java su Windows
- 28. Gestione IOException durante la scrittura di file in java
- 29. Scrittura su file di testo senza sovrascrittura in Java
- 30. Scrittura di file Java Si interrompe in modo casuale?
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
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. –