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

时间:2022-11-11 12:58:05

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

简述:

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

代码:

流克隆复制函数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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

相关文章