是否有可以进行深层复制的库?
ex)普通对象,数组,列表,输入流等。
答案 0 :(得分:6)
@ Konrad的帖子就是现货。进行深度复制的唯一一般方法是使用Java序列化机制。
显然,它很贵。
另一个警告是,某些Java对象无法通过序列化进行复制。例子包括
无法序列化线程和子类,因为线程的执行状态无法序列化。
一般来说,流不能被序列化,因为你无法处理已经写入的流的状态(编写器,输出流)或者尚未读取的流(读取器,输入流)。 (实际上,在读者/输入流的情况下,该状态可能实际上是无限的。)
GUI组件无法序列化,因为它们依赖于无法序列化的(外部)图形环境。
答案 1 :(得分: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个序列化库的列表)
答案 2 :(得分:3)
也许你可以看看 Dozer
答案 3 :(得分:1)
答案 4 :(得分:0)
有一个小的库,可以进行深度克隆和浅层克隆。 This answer包含更多详细信息。