java - 序列化中的不同行为

标签 java serialization

我有以下代码:

ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream("test.dat"));
ArrayList<String> list = null;
for(int i = 0; i < 10; i++)
{
    list = new ArrayList<String>();
    list.add("Object" + i);
    oo.writeObject(list);
}
oo.close();

当我打开 test.dat 文件并反序列化 对象时,我得到了所有对象。但是,如果我将代码更改为:

ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream("test.dat"));
ArrayList<String> list = new ArrayList<String>();
for(int i = 0; i < 10; i++)
{
    list.clear(); //clear the earlier objects
    list.add("Object" + i);
    oo.writeObject(list);
}
oo.close();

现在当我读取对象时,我只得到第一个,即 Object0。任何人都可以解释这种行为吗?

最佳答案

当你将对象写入 ObjectOutputStream 两次时,第二次将只作为对原始数据的引用写入(“that ArrayList with id x 我之前写的").

如果对象的内容已更改(就像您的情况一样),这种情况甚至都会发生,因此您将只有 1 个完整序列化(第一个)和 9 个引用第二种情况。

可以调用ObjectOutputStream.reset()丢弃先前写入的对象列表并强制其再次进行完整序列化。

关于java - 序列化中的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6134229/

相关文章:

java - maven如何正确包含依赖项

java - 在 Java 中测试 REST 服务

java - ArrayList 初始化后可以改变大小吗?

Java "NotSerializableException: java.net.Socket"不发送套接字时

c# - 在 C# 中序列化和反序列化自定义异常

java - 自定义 Gson 序列化器,其字段在运行时未知

java - 代码模型 : generic types generation in a loop . 窄()?

json - Spring Boot 中同一实体的多个自定义序列化程序

java - 高性能序列化 : Java vs Google Protocol Buffers vs . ..?

java - Java 中的反序列化对象