Domanda

Fondamentalmente ho un file di oggetti stringa. Ho usato Java ObjectOutputStream per memorizzare il oggetti. È possibile accedere agli oggetti (stringhe) in modo casuale, ad esempio se voglio accedere all'undicesimo oggetto, potrei in qualche modo saltare in quella posizione senza dover usare readobject () 11a volte per andare in tale posizione. E se voglio saltare indietro, potrei farlo anche, senza dover andare in loop dall'inizio. Grazie.

Come suggerisce, penso di poter in qualche modo, utilizzare il metodo Skipbytes () per realizzare una sorta di accesso casuale. Sebbene non possa garantire che il mio oggetto sia di dimensioni fisse, ma cosa succede se posso mantenere una serie di posizioni di quegli oggetti nel file, potrei semplicemente usare quell'array come indice e skipbytes () a accesso casuale. Quindi il problema rimane, comunque che potrei conoscere le dimensioni degli oggetti quando li sto scrivendo, in modo che potessi registrare la posizione in qualche modo?

È stato utile?

Soluzione

Il ObjectOutputStream stesso non può farlo, perché prima di tutto non può conoscere la dimensione degli oggetti in quel file;In realtà, non può nemmeno sapere che gli oggetti hanno lo stesso tipo.

Se You sa per certo che gli oggetti sono di dimensioni fisse e conosci quella dimensione, è possibile utilizzare il metodo skipBytes() - ma dubito fortemente che tu lo sappia davvero. .

Modifica: Grazie per aver accettato la mia risposta, ma (rendi le cose chiare): la mia intenzione era quella di mostrare un modo in cui questo potrebbe essere fatto dato i requisiti che hai menzionato, ma questo non è affatto dovrebbe essere fatto , a mio avviso.:)

Altri suggerimenti

L'unico modo in cui puoi fare questo è quello di memorizzare gli oggetti separatamente nei propri flussi, all'interno dello stesso file o in diversi file.

È probabile che la cosa più semplice da fare sia conservare i tuoi oggetti in un elenco, quindi leggere quell'elenco in una lettura e accedere alla lista in modo casuale.

Non è possibile con ObjectInputStream, se è necessario accedere a caso è necessario leggere tutti gli oggetti in una raccolta / array che supporta prima l'accesso casuale.

L'utilizzo di ObjectOutputStream per memorizzare gli oggetti della stringa è completa eccessivamente.Hai già pensato di utilizzare un indice di posizioni di partenza.Allora perché non immagazzinare le stringhe direttamente nel file utilizzando un FileOutputStream, avvolgerlo in un OutputStringWriter utilizzando una codifica a lunghezza fissa (dove il numero di byte== lunghezza della stringa, possibilmente * 2), o utilizzare toBytes(encoding) su ciascuna stringa individualmentee annotare la lunghezza degli array di byte risultanti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top