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

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); 
  } 
 } 
} 

测试结果:

总结

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

你可能感兴趣的:(Java中对象的序列化方式克隆详解)