2010-08-12 20 views
12

¿cómo puedo escribir muchos objetos serializables en un solo archivo y luego leer algunos de los objetos como y cuando sea necesario?escribiendo muchos objetos Java en un único archivo

+0

El problema completo: tengo que implementar un B-Tree. Crearía un objeto para cada 'Nodo' y lo almacenaría en el archivo. Ahora cuando estoy usando el b-tree más tarde me gustaría obtener la raíz y leer los nodos deseados solamente. – Anupam

+0

No ha dicho por qué haría esto. La razón por la que pregunto es que podría estar asumiendo erróneamente que esto es más rápido o más eficiente de alguna manera cuando es más probable que sea simplemente compilado de forma innecesaria. Si tiene unos 100 MB de datos, podría comenzar a valer la pena; de lo contrario, simplemente lea la estructura completa en la memoria y acceda a ella. –

Respuesta

8

Debería implementar el aspecto de indexación usted mismo, pero de lo contrario esto podría hacerse. Cuando serializas un objeto, esencialmente obtienes un OutputStream, que puedes señalar donde quieras. Almacenar múltiples objetos en un archivo de esta manera sería sencillo.

La parte difícil viene cuando quiere leer "unos pocos" objetos atrás. ¿Cómo va a saber cómo buscar la posición en el archivo que contiene el objeto específico que desea? Si siempre está leyendo objetos en el mismo orden en que los escribió, desde el inicio del archivo en adelante, esto no será un problema. Pero si desea tener acceso aleatorio a los objetos en el "medio" de la secuencia, tendrá que encontrar la manera de determinar el desplazamiento de bytes del objeto específico que le interesa.

(Este método no tiene nada que ver con la sincronización o incluso Java per se; debe diseñar un esquema que se ajuste a sus requisitos y entorno).

+1

Entonces por ej. Escribo '1',' 2', '3',' 4'. ¿Tendría que leerlos como '4',' 3', '2',' 1'? No tiene sentido para mí leerlos en '1',' 2', '3',' 4' de nuevo. ¿Podrías aclararlo por favor? –

3

La parte de escritura es fácil. Solo tienes que recordar que tienes que escribir todos los objetos 'a la vez'. No puede crear un archivo con objetos serializados, ciérrelo y ábralo de nuevo para agregar más objetos. Si lo intentas, recibirás mensajes de error al leer.

Para deserializar, creo que debe procesar el archivo completo y conservar los objetos que le interesan. Los otros serán creados pero recopilados por el gc en la próxima ocasión.

3

Hacer Object[] para almacenar sus objetos. Funcionó para mí

Cuestiones relacionadas