javascript学习指南_Java中对象的序列化方式克隆详解

更新时间:2021-05-22    来源:php函数    手机版     字体:

【www.bbyears.com--php函数】

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

简述:

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

代码:

流克隆复制函数

 

 代码如下

publicstaticObject deepClone(Object obj){

 if(obj ==null){

  returnnull;

 }

 try{

  ByteArrayOutputStream byteOut =newByteArrayOutputStream();

  Object cloneObj =null;

  ObjectOutputStream out =newObjectOutputStream(byteOut);

  out.writeObject(obj);

  ByteArrayInputStream byteIn =newByteArrayInputStream(byteOut.toByteArray());

  ObjectInputStream in =newObjectInputStream(byteIn);

  cloneObj = in.readObject();

  returncloneObj;

 }catch(Exception e) {

  thrownewRuntimeException(e);

 }

}

 

ObjectClone.java

 

 代码如下

packagetest;

  

importjava.io.ByteArrayInputStream;

importjava.io.ByteArrayOutputStream;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.io.Serializable;

  

publicclassObjectClone {

 /**

  * 测试对象

  */

 privatestaticclassPersonimplementsSerializable {

  privateString name;

  privateintage;

  Person(String name,intage){

   this.name = name;

   this.age = age;

  }

  @Override

  publicString toString() {

   returnString.format("name: %s\nage: %s", name, age);

  }

 }

   

 /**

  * 测试函数

  */

 publicstaticvoidmain(String[] args) {

  Person person =newPerson("Henry",22);

  Person newPerson = (Person)ObjectClone.deepClone(person);

  System.out.println(newPerson);

 }

   

 /**

  * 工具类

  *

  * @param obj

  * @return

  */

 publicstaticObject deepClone(Object obj){

  if(obj ==null){

   returnnull;

  }

  try{

   ByteArrayOutputStream byteOut =newByteArrayOutputStream();

   Object cloneObj =null;

   ObjectOutputStream out =newObjectOutputStream(byteOut);

   out.writeObject(obj);

   ByteArrayInputStream byteIn =newByteArrayInputStream(byteOut.toByteArray());

   ObjectInputStream in =newObjectInputStream(byteIn);

   cloneObj = in.readObject();

   returncloneObj;

  }catch(Exception e) {

   thrownewRuntimeException(e);

  }

 }

}

 

测试结果:

本文来源:http://www.bbyears.com/jiaocheng/119179.html