¿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
Respuesta
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).
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? –
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.
Usaría un Flat File Database (por ejemplo, Berkeley DB Java Edition). Sólo tiene que escribir sus nodos como filas en una tabla como:
Node
----
id
value
parent_id
Hacer Object[]
para almacenar sus objetos. Funcionó para mí
- 1. Java escribiendo en un archivo eliminado
- 2. escribiendo un BitSet en un archivo en java
- 3. (java) Escribiendo en el archivo little endian
- 4. Cómo compilar un único archivo Java
- 5. Escribiendo JSONObject en un archivo
- 6. Escribiendo objetos miembros en paquetes
- 7. escribiendo un servidor ftp java
- 8. Java multihebra lectura de un único archivo grande
- 9. Escribiendo un QNetworkReply en un archivo
- 10. Escribiendo al comienzo de un archivo de texto Java
- 11. Escribiendo en un archivo en Unicode
- 12. escribiendo para sobresalir en java
- 13. Generando un identificador global único en Java
- 14. escribiendo un método público int compareTo() java
- 15. Escribiendo un lector de RSS en Java
- 16. Escribiendo un archivo en una tarjeta SD
- 17. Escribiendo pestañas en un archivo usando PowerShell
- 18. Escribiendo en un archivo con multiprocesamiento
- 19. Agregando muchos objetos en línea a muchos en Django admin
- 20. Escribiendo en el archivo (Prolog)
- 21. Escribiendo registros en el archivo
- 22. Escribiendo un archivo que tiene el nombre de un dispositivo
- 23. Escribiendo un cliente C# para consumir un servicio web Java que devuelve una matriz de objetos
- 24. bloques de código, proyecto único, muchos ejecutables
- 25. Java muchos a muchos mapa asociación
- 26. Actualización de un único archivo en un archivo comprimido tar
- 27. SharpZipLib: La compresión de un único archivo en un único archivo comprimido
- 28. Muchos RewriteBase en un archivo .htaccess?
- 29. Cómo simular un único método en java
- 30. Escribiendo un Comprobador SSL usando Java
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
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. –