当前位置: 移动技术网 > IT编程>开发语言>Java > Java中对象的序列化方式克隆详解

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

测试结果:

总结

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网