5

有没有可以进行深拷贝的库?

ex) 普通对象、数组、列表、输入流等。

4

5 回答 5

6

@Konrad 的帖子很到位。进行深度复制的唯一通用方法是使用 Java 序列化机制。

显然,它很昂贵。

另一个需要注意的是,某些 Java 对象无法通过序列化来复制。例子包括

  • 线程和子类不能被序列化,因为线程的执行状态不能被序列化。

  • 流通常无法序列化,因为您无法获得已写入(写入器、输出流)或尚未读取(读取器、输入流)的流的状态。(实际上,在阅读器/输入流的情况下,该状态实际上可能是无限的。)

  • GUI 组件无法序列化,因为它们依赖于无法序列化的(外部)图形环境。

于 2011-02-15T07:58:13.890 回答
4

寻找序列化。Java 开箱即用地支持它,但您也可以尝试 Hessian、Kryo...

下面是Java序列化的介绍:http: //java.sun.com/developer/technicalArticles/Programming/serialization/

这是 Kryo 人所做的基准测试:http ://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking (20 个序列化库的列表)

于 2011-02-15T07:48:20.353 回答
3

也许你可以看看 推土机

于 2011-02-15T09:31:06.773 回答
1
  1. 对于小对象:复制构造函数。
  2. 对于成员引用具有树状结构的大型对象,请使用 java 序列化。
于 2011-02-15T08:04:24.530 回答
0

有一个小型库可以进行深度克隆和浅层克隆。这个答案包含更多细节。

于 2019-07-22T06:28:47.053 回答