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
投稿

猜你喜欢

  • 简单实现Android学生管理系统(附源码)

    2022-06-12 05:59:04
  • 在@Value注解内使用SPEL自定义函数方式

    2022-04-26 20:59:41
  • C#高级静态语言效率利器之泛型详解

    2023-01-24 09:18:02
  • java编程多线程并发处理实例解析

    2022-06-02 22:14:59
  • Android实现多段颜色进度条效果

    2023-09-30 22:07:51
  • Android GridView实现滚动到指定位置的方法

    2021-08-29 10:04:21
  • Android调用前后摄像头同时工作实例代码

    2021-09-10 05:34:45
  • 一篇文章带你深入了解Java类加载

    2023-06-11 22:12:00
  • RecyclerView的使用之HelloWorld

    2023-10-24 08:14:13
  • 详解Android开发数据持久化之文件存储(附源码)

    2022-06-19 20:30:33
  • 使用AccessibilityService实现自动遍历点赞功能

    2023-10-18 16:22:53
  • SpringCloud使用Zookeeper作为注册中心

    2023-11-21 20:28:20
  • java字符串的重要使用方法以及实例

    2023-11-13 23:11:51
  • Android实现纸飞机的简单操作

    2022-05-16 12:26:04
  • 关于dubbo的RPC和RESTful性能及对比

    2023-05-23 02:55:14
  • android通过自定义toast实现悬浮通知效果的示例代码

    2022-08-11 03:23:54
  • Android 获取屏幕的多种宽高信息的示例代码

    2021-07-10 06:07:10
  • java实现基于TCP协议网络socket编程(C/S通信)

    2021-10-15 23:41:26
  • java实现电话本系统

    2021-06-05 20:39:39
  • C# FileStream简单介绍和使用

    2023-07-05 23:04:05
  • asp之家 软件编程 m.aspxhome.com