【发布时间】:2016-02-22 08:17:19
【问题描述】:
对于这个问题,假设当对象完全写入流并成功读出时,序列化/反序列化是原子的,或者当对象部分写入流并且读回对象时发生异常。假设写操作可能无法成功完成,例如因为停电。
在Serializable 类的描述中,我读到:
如果序列化流已被篡改,也可能发生这种情况;因此,
readObjectNoData对于正确初始化反序列化对象很有用,尽管源流存在“敌意”或不完整。
这可能暗示从ObjectInputStream 读取对象不是原子的。这是否意味着从流中读取 Java 对象可能不是原子操作?
如果部分对象被写入持久内存然后被检索,我确定会引发异常吗?
如果 Java 序列化是非原子的,是否有任何将对象(反)序列化到持久内存作为原子操作的最佳实践?
注意事项:
- 这里我不考虑序列化到数据库(例如使用 Hibernate);对于持久存储,我的意思是例如使用
ObjectInputStream和FileInputStream; - 对于原子,我的意思是例如在对象写入磁盘时发生断电后读取对象期间发生的情况;
- 我没有使用多线程从流中读取或写入对象。
【问题讨论】:
标签: java serialization persistence atomic objectinputstream