2009-09-30 13 views
6

Estoy buscando el formato que Java usa para serializar objetos. La serialización predeterminada serializa el objeto en un formato binario. En particular, tengo curiosidad por saber si dos ejecuciones de un programa pueden serializar el mismo objeto de manera diferente.Representación de Java de objetos serializados

¿Qué condición debe cumplir un objeto para que el objeto mantenga su comportamiento en el viaje de ida y vuelta predeterminado de serialización/deserialización de Java?

Respuesta

0

Me gusta el ejemplo de @Stephen C de Object.hashCode(). Si dichos códigos hash no deterministas se serializan, cuando deserialicemos, los códigos hash no servirán de nada. Por ejemplo, si serializamos un HashMap que funciona en función de Object.hashCode(), su versión deserializada se comportaría de manera diferente que el mapa original. Es decir, buscar el mismo objeto nos daría resultados diferentes en los dos mapas.

+0

Altere su pregunta original, no vuelva a preguntar en una respuesta según las pautas de StackOverflow. – Peter

+0

Claro. Moví mi pregunta. En realidad, es una reformulación de la pregunta original. – reprogrammer

2

Si tiene dos objetos con todas las propiedades establecidas en valores idénticos, se serializarán de la misma manera.

¡Si no fuera repetible, entonces no sería útil!

+0

@Kieveli: no es cierto. Considere el caso de las estructuras de datos HashSet y HashMap. –

1

Siempre lo serializarán de la misma manera. Si este no fuera el caso, no habría garantía de que otro programa podría deserializar los datos correctamente, frustrando el propósito de la serialización.

+0

¿Se filtra alguna información que pueda cambiar en las diferentes ejecuciones de programas, como direcciones de memoria de objeto? – reprogrammer

+0

No. Hasta donde yo sé, una representación pura del objeto y sus valores solamente; los datos necesarios para recrear el objeto cuando se deserializa y nada más. – Peter

+2

No hay una razón inherente por la que una serialización del mismo objeto dos veces necesite producir la misma secuencia de bytes. Por ejemplo, podrían encriptarse con diferentes claves. Siempre que la clave preceda al objeto en la secuencia de datos serializada y se conozca el algoritmo de cifrado, cualquier otro programa podría descifrar fácilmente la secuencia y recrear el objeto original. No hay ninguna razón para creer que la serialización de Java hace esto, pero es concebiblemente posible. – Alohci

-2

Estoy buscando el formato que Java utiliza para serializar objetos.

Para no ser inane, las escribe de alguna manera. Cómo exactamente eso es posible y probablemente deba ser determinado por usted. Un personaje se asigna a ... uh, se involucra pero en lugar de reinventar la rueda, preguntemos exactamente qué necesita tener disponible para reconstruir un objeto y su estado.

La serialización predeterminada serializa el objeto en un formato binario.

Entonces? (De nuevo, no tratando de ser estúpida - suena como tenemos que definir un problema que puede no tener datos concepted)

Tengo curiosidad por saber si dos carreras de un programa pueden serializar el mismo objeto diferente .

Si tuviera un flujo de información, ¿cómo determinaría en qué estados debe restaurarse el objeto?

1

Normalmente, ejecutar el mismo algoritmo de subproceso único con los mismos datos dará como resultado el mismo resultado.

Sin embargo, cosas como el orden con el que HashSet serializan las entradas no están garantizadas. De hecho, un objeto puede ser alterado sutilmente cuando se serializa.

Cuestiones relacionadas