Me enfrenta el siguiente problema. Necesito (de) serializar (binario) una secuencia de objetos en un único archivo en el disco. La parte de serialización no es un problema, solo abra una secuencia en modo de adición y use el método Serialize BinaryFormatter de .Net y listo. El problema con este enfoque es que no puedo simplemente dar este flujo a la función de deserialización de BinaryFormatter, lo que contiene no es una sola instancia del objeto que he serializado.Binario (De) Serialización de una secuencia de objetos a 1 archivo
¿Existe una solución común a este problema? Todos los objetos serializados en una secuencia dada son del mismo tipo, por lo que al menos no necesitamos averiguar qué se debe deserializar, eso es un hecho, pero no parece sugerir una salida a esto.
Aclaración sobre la base de las respuestas: El número de objetos enviados en el que se espera sea grande y por lo tanto es inviable para mantener a todos en una colección de envoltura (como el lavado en el disco requeriría para cargar todos ellos en la memoria -> agregue los nuevos -> flush to disk).
- Normalmente al serializar un objeto aparece un archivo que contiene:
[Objeto]
- lo que estoy creando es un archivo que contiene:
[Objeto] [Objeto] [Objeto] [Objeto] ... [Objeto]
Y necesito deserializar las instancias de Objeto individuales.
¡Gracias de antemano!
Respuesta: Dado que la respuesta es aludido en este hilo (con suficiente claridad), pero nunca se indica explícitamente, pensé voy a decirlo aquí:
while (fileStream.Position < fileStream.Length)
messages.Add((Message)formatter.Deserialize(fileStream));
El BinaryFormatter se deserializar un objeto cada vez que lo desee :) Es posible que desee almacenar en caché la propiedad fileStream.Length, ya que la longitud parece volver a calcularse cada vez que llama a la propiedad, ralentizando las cosas. No tengo idea de por qué eso no funcionó la primera vez que lo intenté antes de publicar esta pregunta, pero funciona sin problemas ahora.
los objetos se transmiten durante la vida útil del sistema y hay una gran cantidad de ellos esperados , Necesito enjuagarmeAl mantenerlos en wrapper-collection tendré que mantenerlos todos en la memoria y volver a escribir todo el archivo cada vez que quiera descargar al disco. – United
la primera sugerencia no funciona, a causa de necesitar otra biblioteca (también conocido como proceso de aprobación de 6 meses a través de legal, si tengo suerte). El segundo es intrigante. Para la segunda respuesta, parece que tienen la serialización normal para deserializar la serie de objetos de un archivo sin que esos objetos estén en la colección. En mis pruebas eso no funcionó, así que supongo que trataré de investigar más a fondo + tal vez el seguimiento en esa pregunta SO. – United