首页 > 编程 > Java > 正文

Java中对象的序列化方式克隆详解

2019-11-26 13:16:01
字体:
来源:转载
供稿:网友

Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。

简述:

用字节流的方式,复制Java对象

代码:

流克隆复制函数

public static Object deepClone(Object obj){  if(obj == null){   return null;  }  try {   ByteArrayOutputStream byteOut = new ByteArrayOutputStream();   Object cloneObj = null;   ObjectOutputStream out = new ObjectOutputStream(byteOut);   out.writeObject(obj);   ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());   ObjectInputStream in = new ObjectInputStream(byteIn);   cloneObj = in.readObject();   return cloneObj;  } catch (Exception e) {   throw new RuntimeException(e);  } } 

ObjectClone.java

package test;  import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable;  public class ObjectClone {  /**   * 测试对象   */  private static class Person implements Serializable {   private String name;   private int age;   Person(String name, int age){    this.name = name;    this.age = age;   }   @Override   public String toString() {    return String.format("name: %s/nage: %s", name, age);   }  }    /**   * 测试函数   */  public static void main(String[] args) {   Person person = new Person("Henry", 22);   Person newPerson = (Person)ObjectClone.deepClone(person);   System.out.println(newPerson);  }    /**   * 工具类   *   * @param obj   * @return   */  public static Object deepClone(Object obj){   if(obj == null){    return null;   }   try {    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();    Object cloneObj = null;    ObjectOutputStream out = new ObjectOutputStream(byteOut);    out.writeObject(obj);    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());    ObjectInputStream in = new ObjectInputStream(byteIn);    cloneObj = in.readObject();    return cloneObj;   } catch (Exception e) {    throw new RuntimeException(e);   }  } } 

测试结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表