Pregunta

¿Por qué no podemos serializar objetos en acceso aleatorio presentar? y por otro lado podemos serializar objetos en un archivo de acceso secuencial?

"" C # no proporciona un medio para obtener el tamaño de un objeto en tiempo de ejecución. Esto significa que, si serializar la clase, no podemos garantizar un tamaño de registro de longitud fija "" (del libro que he leído en).

lo que no podemos leer el archivo de acceso aleatorio porque no sabemos cada tamaño del objeto en el archivo así que ¿cómo podríamos hacer la búsqueda ??????

¿Fue útil?

Solución

Cualquier objeto marcado con el atributo SerializableAttribute se puede serializar (en la mayoría de escenarios). El resultado de la serialización siempre se dirige a una corriente, que puede muy bien ser un flujo de salida de archivo.

¿Usted está preguntando por qué un gráfico de objetos no se puede deserializar parcialmente? Sólo serialización de .NET [de] serializa gráficos de objetos completos. De lo contrario tendrá que recurrir a otras formateadores de serialización, o escribir el suyo propio.

Para obtener acceso aleatorio directo a un archivo, debe abrir el archivo con una corriente que apoya la búsqueda.

EDIT:

Buscando en la corriente resultante de una serialización no tiene ningún propósito práctico - sólo el formateador serialiation sabe lo que hay allí de todos modos y siempre deben ser alimentados con el inicio de la corriente

.

Para persistir los datos en otras estructuras; no en un proceso de dos etapas: En primer lugar, el objetivo de los bytes de serialización a un [es decir memoria respaldados] corriente que se puede leer el tamaño de la tarde, a continuación, escribir los datos en el almacén de respaldo real, utilizando dicho conocimiento de tamaño.

No se puede predecir el tamaño de un objeto serializado, debido a que la representación serializada puede diferir mucho de la representación en tiempo de ejecución.

Es todavía posible lograr un control exacto sobre el tamaño de salida, si se utiliza sólo los tipos primitivos, y se escribe utilizando un BinaryWriter -. Pero eso no es per se serialización

Otros consejos

La serialización binaria predeterminada en .NET serializa un gráfico que todo el objeto, que, por su naturaleza de ser un gráfico, no tiene un tamaño constante, lo que significa que cada objeto de serialización (registro) no tendrá un tamaño constante, impidiendo el acceso aleatorio.

Para poder acceder al azar ningún registro en un archivo, escribir su propia implementación de la serialización binaria de la clase, o utilizar una base de datos. Si necesita una forma sencilla, sin instalar el motor de base de datos de un único subproceso, echar un vistazo a SQL Server Compact .

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