`

利用Serialization实现对象深拷贝

 
阅读更多
java 代码
 
  1. private PersonAggregateData copyAggregate(PersonAggregateData original) throws EventsPersonManagementException {  
  2.       
  3.     ByteArrayOutputStream outputBytes = new ByteArrayOutputStream();  
  4.     ObjectOutputStream out = null;  
  5.     ObjectInputStream in = null;  
  6.     PersonAggregateData copy;  
  7.     try {  
  8.         out = new ObjectOutputStream(outputBytes);  
  9.         ByteArrayInputStream inputBytes;  
  10.         out.writeObject(original);  
  11.   
  12.         inputBytes = new ByteArrayInputStream(outputBytes.toByteArray());  
  13.         in = new ObjectInputStream(inputBytes);  
  14.         copy = (PersonAggregateData) in.readObject();  
  15.     } catch (IOException e) {  
  16.         throw new EventsPersonManagementException("errors occur while copying the PersonAggregateData", e);  
  17.     } catch (ClassNotFoundException e) {  
  18.         throw new EventsPersonManagementException("errors occur while copying the PersonAggregateData", e);  
  19.     } finally {  
  20.         try {  
  21.             if (out != null) {  
  22.                 out.close();  
  23.             }  
  24.             if (in != null) {  
  25.                 in.close();  
  26.             }  
  27.         } catch (IOException e) {  
  28.             throw new EventsPersonManagementException("errors occur while copying the PersonAggregateData", e);  
  29.         }  
  30.     }  
  31.     return copy;  
  32. }  
分享到:
评论

相关推荐

    C#浅拷贝(MemberwiseClone等多种方法)与深拷贝(反射、多种反序列化)实例

    在压缩包中,`DeepCopy.sln`应该是一个包含深拷贝实现的解决方案文件,`DeepCopy`和`ShallowCopy`可能分别对应深拷贝和浅拷贝的代码示例。这些示例可以帮助你更好地理解和应用上述概念。 总之,了解浅拷贝和深拷贝...

    Java 细数浅拷贝和深拷贝

    实现深拷贝的一种常见方式是利用序列化(Serialization)机制。具体步骤如下: 1. 实现`Serializable`接口。 2. 通过序列化将对象转换成字节流。 3. 通过反序列化将字节流转换回新的对象。 示例代码如下: ```java...

    C#深度拷贝克隆源码

    浅拷贝只复制对象的引用,而深拷贝则复制对象本身及其所有嵌套对象。对于值类型,如int、double,它们是按值复制,所以浅拷贝和深拷贝没有区别。但对引用类型,如自定义类实例,就需要区分这两种拷贝方式。 实现...

    浅谈C#中List<T>对象的深度拷贝问题

    深度拷贝是指创建一个新对象,不仅复制原始对象的属性,还复制了嵌套对象的引用,确保新旧对象之间的独立性。本文将探讨C#中List对象的深度拷贝问题。 首先,我们来看当List中的T是值类型,如int、double等时的情况...

    c#深度复制浅度复制

    - 手动实现深/浅度复制:通过遍历对象的所有字段,对每个字段进行复制,可以实现自定义的深/浅度复制。对于引用类型,需要额外处理以实现深度复制。 ```csharp public MyClass DeepCopy() { MyClass copy = new ...

    用序列化实现ListT 实例的深复制(推荐)

    在C#中,我们可以利用`System.Xml.Serialization.XmlSerializer`类来实现XML序列化,从而实现深复制。以下是如何使用序列化实现List实例深复制的步骤: 1. 首先,创建一个辅助类`SerializLog`,该类包含一个静态...

    基于Java的源码-存储与读取对象.zip

    浅拷贝仅复制对象的引用,而深拷贝会创建新对象并复制原始对象的所有属性。在序列化中,如果对象包含其他对象的引用,那么默认的序列化会进行深拷贝。 5. transient关键字 `transient`关键字用于标记类的某个字段不...

    23C#设计模式代码打包下载

    C#中的`ICloneable`接口可以用于实现浅拷贝或深拷贝。 6. **组合模式**:允许你将对象组合成树形结构来表现“整体/部分”层次结构。在C#中,可以利用接口和继承实现对象的透明操作。 7. **装饰器模式**:动态地给...

    flexjson-2.1.zip

    你可以选择是否深拷贝对象,以及如何处理循环引用。 2. **对象反序列化(Deserialization)**:`JSON.deserialize()`方法用于从JSON字符串创建Java对象。可以自定义转换规则,例如指定类型转换器或回调函数来处理...

    object:오브젝트

    但是,大多数情况下,你需要覆盖`clone()`并实现深拷贝,以确保所有引用类型的字段也被正确复制。 8. **序列化(Serialization)** Java的序列化机制允许将对象转换为字节流,以便保存到磁盘或在网络上传输。`...

Global site tag (gtag.js) - Google Analytics