我有以下代码将我的数据序列化到一个文件中:
out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(chunk);
out.flush();
我阅读了以下内容:
in = new ObjectInputStream(new FileInputStream(file));
Chunk chunk = (Chunk) in.readObject();
奇怪的是,当我读取数据时,所有成员都设置为默认值,并且我没有得到之前写入的任何数据。
如果我使用 XML 变体,一切正常。
e = new XMLEncoder(new FileOutputStream(file));
e.writeObject(chunk);
e.flush();
和
e = new XMLDecoder(new FileInputStream(file));
Chunk chunk = (Chunk) e.readObject();
二进制格式有什么问题?
更新
好的,我现在明白了:Chunk 是一个复杂的类,里面有类,其他类有其他类,等等。在某些时候,包含的类被声明为 Object,并且应该是可序列化的。正如史蒂夫提到的。
感谢您的回答。
最佳答案
虽然我想不出一个解码器与另一个解码器工作方式不同的充分理由,但我建议发布 Chunk 对象的代码。要看的东西:
- 您要声明任何字段为临时字段吗?这些不会被序列化
- 嵌套对象或集合本身可能无法序列化是否会出现任何问题?
- 默认值是否在构造函数或其他不会在反序列化操作中调用的地方被覆盖?
关于Java序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607334/