Java深拷贝库
有可以制作深拷贝的图书馆吗?
ex)普通对象,数组,列表,输入流等
@ Konrad的post就是现货。 进行深度复制的唯一一般方法是使用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 。
- 对于小对象:复制构造函数。
- 对于大型对象,其成员引用具有树状结构,请转到java序列化。