如何实现序列化接口的对象集合的深拷贝操作?

2026-04-15 10:5013阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计336个文字,预计阅读时间需要2分钟。

如何实现序列化接口的对象集合的深拷贝操作?

在Java中,对可变对象的深拷贝是处理对象复制时的常见需求。深拷贝确保复制出的对象与原对象在内存中是完全独立的,即修改一个对象不会影响到另一个。以下是一个简化版的深拷贝方法实现,使用了序列化和反序列化技术:

javaimport java.io.*;import java.util.ArrayList;import java.util.List;

public class DeepCopyUtil {

public static List deepCopy(List src) throws IOException, ClassNotFoundException { // 使用ByteArrayOutputStream和ObjectOutputStream进行序列化 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(bos); oos.writeObject(src);

// 使用ByteArrayInputStream和ObjectInputStream进行反序列化 ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois=new ObjectInputStream(bis);

// 返回反序列化后的对象 return (List) ois.readObject(); }

如何实现序列化接口的对象集合的深拷贝操作?

// 测试方法 public static void main(String[] args) { try { List originalList=new ArrayList(); originalList.add(Item1); originalList.add(Item2); originalList.add(Item3);

List copiedList=deepCopy(originalList);

// 打印结果以验证深拷贝是否成功 System.out.println(Original List: + originalList); System.out.println(Copied List: + copiedList); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }}

众所周知,java里要做到对可变对象的深拷贝是麻烦的,因为你总是引用的地址,下面这一段是一个利用序列化流实现的对象集合的深拷贝

public static List deepCopy(List src) throws IOException, ClassNotFoundException { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(src); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); @SuppressWarnings("unchecked") List dest = (List ) in.readObject(); return dest; }

本文共计336个文字,预计阅读时间需要2分钟。

如何实现序列化接口的对象集合的深拷贝操作?

在Java中,对可变对象的深拷贝是处理对象复制时的常见需求。深拷贝确保复制出的对象与原对象在内存中是完全独立的,即修改一个对象不会影响到另一个。以下是一个简化版的深拷贝方法实现,使用了序列化和反序列化技术:

javaimport java.io.*;import java.util.ArrayList;import java.util.List;

public class DeepCopyUtil {

public static List deepCopy(List src) throws IOException, ClassNotFoundException { // 使用ByteArrayOutputStream和ObjectOutputStream进行序列化 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(bos); oos.writeObject(src);

// 使用ByteArrayInputStream和ObjectInputStream进行反序列化 ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois=new ObjectInputStream(bis);

// 返回反序列化后的对象 return (List) ois.readObject(); }

如何实现序列化接口的对象集合的深拷贝操作?

// 测试方法 public static void main(String[] args) { try { List originalList=new ArrayList(); originalList.add(Item1); originalList.add(Item2); originalList.add(Item3);

List copiedList=deepCopy(originalList);

// 打印结果以验证深拷贝是否成功 System.out.println(Original List: + originalList); System.out.println(Copied List: + copiedList); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }}

众所周知,java里要做到对可变对象的深拷贝是麻烦的,因为你总是引用的地址,下面这一段是一个利用序列化流实现的对象集合的深拷贝

public static List deepCopy(List src) throws IOException, ClassNotFoundException { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(src); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); @SuppressWarnings("unchecked") List dest = (List ) in.readObject(); return dest; }