gpt4 book ai didi

java - 集合的可序列化包装器是个坏主意吗?

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

有很多集合不是Serializable。一些特别烦人的是 HashMap 上的 keySetvalues 集合(有关该讨论,请参阅 JDK 错误 47562774501848)。

如果我需要序列化这些集合中的一个,建议的解决方法是在另一个实现了 Serializable 的集合中重击内容并发送它。例如:

Set<T> realSet = myHashMap.keySet();
Set<T> toSerialize = new HashSet<T>(realSet);

我不喜欢这样的开销,尤其是当考虑到序列化操作的实现通常与写出大小和遍历集合一次一样简单时。

这让我想到了一个可序列化包装类的想法,它实现了这个简单的序列化形式,并且本着 synchronizedSet 和 friend 们的精神,只有一个对委托(delegate)的 transient 引用。类似这样,实现仅依赖于 size()iterator,并使用 readResolve 反序列化以提供 HashSet,比如说。

这感觉有点脏。真正的漏洞在哪里?

  • 无法根据与 HashSet(TreeSetIdentityHashMap 等)的等价关系来处理集合。我看不出这有什么关系,我们只是不指定这些类型的集合的结果,就像在其他地方看到的那样。
  • 是否存在关于版本 uid 的序列化问题会阻止它工作?即将尝试...
  • 这在反序列化时不符合规范,例如 HashMap#keySet(),因为它不是映射的实时 View 。是否可以仅指定它是序列化时映射的静态 View ?

最佳答案

I don't like the overhead of this

过早的优化。有 99% 的把握,使用复制构造函数不会成为程序的性能瓶颈。在探查器告诉您是什么之前,您甚至不应该开始考虑这种情况。

关于java - 集合的可序列化包装器是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4089733/

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