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

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

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

标签:java,克隆,序列化
0
投稿

猜你喜欢

  • C#读取csv格式文件的方法

    2023-08-28 22:38:46
  • Unity实现图形相交检测

    2021-09-16 09:31:01
  • 三道java新手入门面试题,通往自由的道路--多线程

    2023-05-24 23:12:51
  • 详解Spring全局异常处理的三种方式

    2023-11-11 15:31:47
  • VS2019打包WPF安装程序最新教程(图文详解)

    2021-11-18 15:52:08
  • 当Mybatis遇上目录树超全完美解决方案

    2021-09-28 16:21:13
  • SpringBoot 内置工具类的使用

    2021-08-26 11:42:21
  • Java Cookie与Session实现会话跟踪详解

    2022-12-22 08:59:13
  • 教你如何使用Java8实现菜单树形数据

    2022-09-11 12:29:22
  • C#操作XML文件步骤

    2021-11-04 21:51:44
  • java学生管理系统界面简单实现(全)

    2023-11-28 21:35:25
  • linux的shell命令检测某个java程序是否执行

    2021-07-27 14:32:20
  • java 避免出现NullPointerException(空指针)的方法总结

    2022-08-31 04:15:51
  • C#计算字符串哈希值(MD5、SHA)的方法小结

    2022-07-02 15:47:55
  • SpringMVC执行过程详细讲解

    2023-06-07 10:04:54
  • java读取解析xml文件实例

    2023-01-04 05:52:40
  • java启动参数之谜的排查过程

    2023-02-18 19:47:50
  • Java集合继承体系详解

    2023-12-03 00:22:13
  • 在Java内存模型中测试并发程序代码

    2023-11-24 20:37:55
  • Java中MultipartFile与File互转的实现

    2022-02-15 15:36:02
  • asp之家 软件编程 m.aspxhome.com