gpt4 book ai didi

java - 为什么写入两个不同 Streams 的单个对象在读回时代表两个不同的对象?

转载 作者:搜寻专家 更新时间:2023-11-01 01:06:54 24 4
gpt4 key购买 nike

标题说明了我的需要,下面是我正在使用的代码:

测试用例

SameObjectDifferentStreams same = new SameObjectDifferentStreams(); 
ObjectOutputStream out1 = new ObjectOutputStream(new FileOutputStream("file1"));
ObjectOutputStream out2 = new ObjectOutputStream(new FileOutputStream("file2"));

out1.writeObject(same);
out1.close();

out2.writeObject(same);
out2.close();

System.out.println("The Original reference is :" + same.toString());

oin1 = new ObjectInputStream(new FileInputStream("file1"));
oin2 = new ObjectInputStream(new FileInputStream("file2"));

SameObjectDifferentStreams same1 =
(SameObjectDifferentStreams) oin1.readObject();
System.out.println("The First Instance is :" + same1.toString());

SameObjectDifferentStreams same2 =
(SameObjectDifferentStreams) oin2.readObject();
System.out.println("The Second Instance is :" + same2.toString());

输出

The Original reference is :serialization.SameObjectDifferentStreams@9304b1
The First Instance is :serialization.SameObjectDifferentStreams@190d11
The Second Instance is :serialization.SameObjectDifferentStreams@a90653

最佳答案

当您将对象写入流时,您实际上是序列化它,即只写入它的数据。然后,当您阅读它时,您会读取数据并创建新对象。就像您使用适当的构造函数参数调用 new MyObject() 一样。显然新对象是在这里创建的。

如果您两次读取同一个序列化对象,您将创建两次新实例。这 2 个实例是相等的,即它们的所有字段都相等,但引用不同,因此表达式 o1==o2 返回 false while(如果你实现合理的 equals() 方法)o1.equals(o2) 返回 true。

关于java - 为什么写入两个不同 Streams 的单个对象在读回时代表两个不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com