gpt4 book ai didi

java - 反序列化后丢失对对象的引用

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:40 26 4
gpt4 key购买 nike

假设我有两个 HashMap:hashMapFoohashMapBar

我创建了一些对象 objCake 并将其放入 到两个映射中,因此每个映射都有一个对 objCake 的引用,当我创建一些更改为 objCake 无论我从哪个 map 访问它,我都会得到正确的对象状态。

在我对两个映射进行序列化和反序列化之后,我遇到了问题,我的对象 objCake 变成了两个不同的对象!我在 hashMapFoo 中更改了它的状态,但在 hashMapBar 中没有任何反应。 hashMapBar 不再包含正确的引用!所有映射和对象都实现可序列化

谁能解释一下?

最佳答案

对我有用:

public class MapSerializationTest {
private static class Foo implements Serializable {
}

public static void main(String[] args) throws Exception {
Foo foo = new Foo();

Map<String, Foo> map1 = new HashMap<String, Foo>();
map1.put("foo", foo);
Map<String, Foo> map2 = new HashMap<String, Foo>();
map2.put("foo", foo);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(map1);
oos.writeObject(map2);
oos.close();

byte[] bytes = baos.toByteArray();

ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
map1 = (Map<String, Foo>) ois.readObject();
map2 = (Map<String, Foo>) ois.readObject();
System.out.println(map1.get("foo") == map2.get("foo")); // prints true
}
}

向我们展示您的代码。您可能会在第一张 map 和第二张 map 之间的 ObjectOutputStream 上调用 reset()。或者您使用两个不同的 ObjectOutputStream 实例。

关于java - 反序列化后丢失对对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523434/

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