为什么这个类不可序列化?

时间:2009-12-17 00:04:53

标签: java serialization random mersenne-twister

我在http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java使用Mersenne-Twister实现作为默认java.util.Random类的替代品。但是,四个字段(int,boolean和2个byte [])标记为transient。这意味着我无法在不实现自定义功能的情况下序列化此类的对象。

问题是,有没有理由将这些字段标记为瞬态?是否有任何代码保存从文件中读取对象时没有任何意义的信息?我从字段中删除了transient修饰符,它似乎工作正常,但我没有对它进行过密集测试,所以可能会出现故障吗?

就个人而言,我不明白为什么,因为在课堂上所做的一切都是算术的。

2 个答案:

答案 0 :(得分:2)

serialVersionUID的评论来看,作者似乎不想考虑序列化。添加transient可能会抑制一些编译器/ IDE警告。

答案 1 :(得分:-1)

最有可能推断出类transient的非静态字段全部背后的原因是MTRandom类与java.util.Random保持二进制兼容,它从中延伸。

理论上,您可以序列化MTRandom实例,并将其反序列化为Random实例,一切都可行。

如果这些字段不是transient,那么它们将被序列化并变得不兼容。

但是,据我所知,消除瞬态不应该对你造成问题。