Pregunta

Java proporciona java.io.Serializable y java.lang.Cloneable En su biblioteca estándar (y apoyo especial para la TI en el idioma y el JVM) para tareas en torno a la deserialización/serialización/clonación.

Ha elegido C# una ruta diferente para proporcionar esta funcionalidad, ¿cómo difiere la implementación y el código de código de Java y por qué se hizo de esta manera?

Como ejemplo, ¿por qué C# usa un atributo (anotación) y una interfaz para la serialización?

¿Fue útil?

Solución

.Net no se usa ISerializable como solo una interfaz marcador. Actúa no solo como un marcador, sino que también le permite controlar exactamente cómo .NET serializará la clase implementando GetObjectData y un constructor que toma los argumentos adecuados.

El atributo se usa cuando la clase se puede serializar, pero no desea definir su propio comportamiento de serialización.

Entonces: usa ISerializable Cuando quieres definir tu propio comportamiento de serialización; o usar el [Serializable] Atributo cuando desee dejarlo a la formación de serialización.

¿Lo llamaría evolución? No sé. .NET solo le ofrece diferentes grados de flexibilidad.

Otros consejos

Si quieres algo sobre la serialización: Mira esto

No creo que C# haya evolucionado. Más bien, arreglaron ambas cosas:

  • La serialización en Java no es muy limpia: la deserialización implica la "creación" de los objetos sin llamar a un constructor, todo el proceso puede incluir el tiempo de ejecución que llama a los métodos privados, etc. Verifique las especificaciones Si tienes curiosidad.

  • Cloneable está simplemente roto. No debe ser una interfaz marcadora, pero especifique el clone() método. Como eres tu tienes Cloneables no puedes clone().

Básicamente, hay muchas cosas en Java, principalmente de los anteriores a 1.2 días, que están bastante rotos/desordenados/inmundos/lo que sea.

No estoy seguro de lo que quiere decir con 'evolucionado', si algo, creo que la tendencia es hacia los atributos en lugar de las interfaces marcadoras. No sé si Java también ha ido así.

La serialización en el CLR, por ejemplo, se evidencia en su forma más básica con los atributos, aunque puede implementar algunas interfaces no marcadoras que le brindan más control sobre el proceso si lo necesita.

Las interfaces de marcadores son probablemente una de las peores decisiones jamás implementadas en Java. Quiero decir, mira lo inútil que resultó ser, porque nadie definió un método público clon () en la interfaz.

.Net no entrar en esa dirección (al menos no soy consciente de ninguna interfaces en esa dirección) es menos evolución y más un abandono de toda la noción. Otra dirección que parece tomarse cada vez más parece ser anotaciones, lo que supongo que se podría ver como un "marcador", pero en un nivel más básico (por ejemplo, estoy bastante seguro de si Java se implementó hoy, transitoria sería una anotación y no un calificador)

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