Pregunta

Yo estaba usando la aplicación de Mersenne Twister- http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java como un reemplazo de acogida para la clase java.util.Random defecto. Sin embargo, cuatro campos (un int, un valor booleano y dos byte []) se marcan como transient. Esto significa que no puedo serializar un objeto de esta clase sin implementar funcionalidad personalizada.

La pregunta es, ¿hay alguna razón por la que estos campos están marcados transitoria? ¿Hay algún código de ahí que contiene información que no tiene ningún sentido cuando el objeto se lee de un archivo? Quité el modificador transient de los campos y parece que funciona bien, pero yo no lo he probado intensamente y así podría haber casos en los que se rompe?

En lo personal, no puedo ver por qué, ya que todo lo que se hace en la clase es aritmética.

¿Fue útil?

Solución

Lo más probable es el razonamiento detrás de hacer todos de los campos no estáticos de la clase transient era para que la clase MTRandom permanece compatible a nivel binario con java.util.Random, de la que se extiende.

Así que, teóricamente, puede serializar una instancia MTRandom y deserializar como una instancia Random y todo iba a funcionar.

Si estos campos no se transient, entonces habría serializado y resultar incompatibles.

Sin embargo, en lo que puedo decir, la eliminación de los transitorios no debe causar un problema para usted.

Otros consejos

A partir de la observación sobre serialVersionUID, parece que el autor no quería tener en cuenta la serialización. Adición de transient puede haber suprimido algunas advertencias compilador / IDE.

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