我在http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java上使用Mersenne-Twister实现作为默认java.util.Random类的临时替代品。但是,有四个字段(一个整数、一个布尔值和两个byte[])被标记为transient。这意味着我不能在不实现自定义功能的情况下序列化这个类的对象。
问题是,这些字段被标记为瞬态有什么原因吗?当从文件中读取对象时,是否有任何代码包含没有任何意义的信息?我从字段中删除了transient修饰符,它似乎工作得很好,但我没有对它进行密集的测试,所以是否会出现它被破坏的情况?
就我个人而言,我不明白为什么,因为在类中所做的一切都是算术。
发布于 2009-12-17 08:16:56
最有可能的原因是,将类transient的非静态字段的所有都设为是为了使MTRandom类保持与java.util.Random的二进制兼容性,它是从java.util.Random扩展而来的。
因此,从理论上讲,您可以序列化MTRandom实例,并将其反序列化为Random实例,一切都会正常工作。
如果这些字段不是transient,那么它们将被序列化并变得不兼容。
但是,据我所知,删除瞬变应该不会给您带来问题。
发布于 2009-12-17 20:35:25
从serialVersionUID上的评论来看,作者似乎不想考虑序列化。添加transient可能会抑制一些编译器/集成开发环境的警告。
https://stackoverflow.com/questions/1918671
复制相似问题