首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个类是不可序列化的?

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

Stack Overflow用户
提问于 2009-12-17 08:04:53
回答 2查看 509关注 0票数 0

我在http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java上使用Mersenne-Twister实现作为默认java.util.Random类的临时替代品。但是,有四个字段(一个整数、一个布尔值和两个byte[])被标记为transient。这意味着我不能在不实现自定义功能的情况下序列化这个类的对象。

问题是,这些字段被标记为瞬态有什么原因吗?当从文件中读取对象时,是否有任何代码包含没有任何意义的信息?我从字段中删除了transient修饰符,它似乎工作得很好,但我没有对它进行密集的测试,所以是否会出现它被破坏的情况?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-17 08:16:56

最有可能的原因是,将类transient的非静态字段的所有都设为是为了使MTRandom类保持与java.util.Random的二进制兼容性,它是从java.util.Random扩展而来的。

因此,从理论上讲,您可以序列化MTRandom实例,并将其反序列化为Random实例,一切都会正常工作。

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

但是,据我所知,删除瞬变应该不会给您带来问题。

票数 -1
EN

Stack Overflow用户

发布于 2009-12-17 20:35:25

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1918671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档