【问题标题】:Java deep copy libraryJava 深拷贝库
【发布时间】:2011-06-27 10:14:00
【问题描述】:

有没有可以做深拷贝的库?

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

【问题讨论】:

标签: java deep-copy


【解决方案1】:

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

显然,它很昂贵。

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

  • 线程及其子类无法序列化,因为线程的执行状态无法序列化。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 快速评论:afaik,基准测试不只是由 kryo 作者完成,而是由一群人完成——也就是说,作为集体工作,它应该比任何单个作者的基准测试更主观。特别是。因为多个“竞争”作者为基准做出了贡献,这有助于让每个人都诚实。
    【解决方案3】:

    也许你可以看看 Dozer.

    【讨论】:

      【解决方案4】:
      1. 对于小对象:复制构造函数。
      2. 对于成员引用具有树状结构的大型对象,请使用 java 序列化。

      【讨论】:

        【解决方案5】:

        有一个小型库可以进行深度克隆和浅层克隆。 This answer 包含更多详细信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-12
          • 2011-03-24
          • 2016-12-03
          相关资源
          最近更新 更多