【发布时间】:2011-06-27 10:14:00
【问题描述】:
有没有可以做深拷贝的库?
ex) 普通对象、数组、列表、输入流等
【问题讨论】:
-
Kryo 内置了对copying/cloning 的支持。这是从对象直接复制到对象,而不是对象->字节->对象。
有没有可以做深拷贝的库?
ex) 普通对象、数组、列表、输入流等
【问题讨论】:
@Konrad 的帖子很到位。进行深度复制的唯一通用方法是使用 Java 序列化机制。
显然,它很昂贵。
另一个需要注意的是,某些 Java 对象无法通过序列化来复制。例子包括
线程及其子类无法序列化,因为线程的执行状态无法序列化。
通常无法序列化流,因为您无法获取已写入(写入器、输出流)或尚未读取(读取器、输入流)的流的状态。 (实际上,在阅读器/输入流的情况下,该状态可能实际上是无限的。)
GUI 组件无法序列化,因为它们依赖于无法序列化的(外部)图形环境。
【讨论】:
寻找序列化。 Java 支持开箱即用,但您也可以尝试 Hessian、Kryo...
这里是Java序列化的介绍:http://java.sun.com/developer/technicalArticles/Programming/serialization/
这是由 Kryo 人完成的基准测试:http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking(20 个序列化库的列表)
【讨论】:
也许你可以看看 Dozer.
【讨论】:
【讨论】:
有一个小型库可以进行深度克隆和浅层克隆。 This answer 包含更多详细信息。
【讨论】: