软件编程
位置:首页>> 软件编程>> java编程>> Java中对象的序列化方式克隆详解

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

作者:anialy  发布时间:2021-09-15 20:02:01 

标签: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中对象的序列化方式克隆详解

来源:http://blog.csdn.net/anialy/article/details/45279479

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com