Pregunta

básicamente tengo un archivo de Objetos String.He usado Java ObjectOutputStream para almacenar los objetos.Es posible obtener acceso a los objetos(Cadenas) de manera aleatoria, dicen que si quiero acceder a las 11 de objeto, tan sólo yo pudiera de alguna manera de saltar a ese lugar sin tener que utilizar readObject() 11 veces en bucle a esa ubicación.Y si quiero saltar de nuevo, yo también pudiera hacerlo, sin tener en bucle desde el principio de nuevo.Gracias.

Como se sugiere, creo que de alguna manera se puede hacer uso skipBytes() el método para la cuenta de algún tipo de acceso aleatorio.Aunque no puedo garantizar que mi objeto es de tamaño fijo, pero lo que si puedo mantener una matriz de posiciones de los objetos en el archivo, yo podría simplemente utilizar la matriz como un índice y skipBytes() para el acceso aleatorio.Así que el problema sigue siendo, de todos modos que yo podría saber el tamaño de los objetos cuando estoy en el momento de la escritura, de modo que yo pudiera registrar la posición de alguna manera?

¿Fue útil?

Solución

El ObjectOutputStream sí puede hacerlo, porque primero de todo es que no se puede saber el tamaño de los objetos en el archivo;en realidad, no puede ni siquiera saben que los objetos son del mismo tipo.

Si usted la certeza de que los objetos son de tamaño fijo y usted sabe que el tamaño, usted puede hacer uso de la skipBytes() método, pero estoy muy en duda que realmente saben.


EDITAR:Gracias por aceptar mi respuesta, pero (sólo dejar las cosas claras):mi intención era mostrar una forma de que esta se podría hacer teniendo en cuenta los requisitos que se han mencionado, pero esto no es en absoluto la forma en que se se debe hacer, que , en mi opinión.:)

Otros consejos

La única forma en que puede hacer esto es almacenar los objetos por separado en sus propios flujos, ya sea dentro del mismo archivo o en diferentes archivos.

Es probable que la cosa más sencilla de hacer es almacenar sus objetos en una lista y luego leer esa lista en una lectura y acceda a la lista al azar.

Esto no es posible con ObjectInputStream, si necesita acceso al azar, deberá leer todos los objetos en una recopilación / matriz que admite primero el acceso aleatorio.

El uso de ObjectOutputStream para almacenar los objetos de Cadena se completa exageración.Ya has pensado en el uso de un índice de posiciones de partida.Entonces, ¿por qué no almacenar las cadenas directamente en el archivo utilizando un FileOutputStream - ya sea envolver en un OutputStringWriter el uso de una longitud fija de codificación (donde el número de bytes == longitud de la cuerda, posiblemente *2), o el uso toBytes(encoding) en cada cuerda y tenga en cuenta la longitud de la resultante de las matrices de bytes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top