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

 更新时间:2017年01月13日 09:21:50   作者:anialy  
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方。这篇文章主要给大家介绍了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); 
  } 
 } 
} 

测试结果:

总结

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

相关文章

  • SpringCloud Feign隔离与降级详细分析

    SpringCloud Feign隔离与降级详细分析

    Feign是Netflix公司开发的一个声明式的REST调用客户端; Ribbon负载均衡、 Hystrⅸ服务熔断是我们Spring Cloud中进行微服务开发非常基础的组件,在使用的过程中我们也发现它们一般都是同时出现的,而且配置也都非常相似
    2022-11-11
  • 一文搞懂spring boot本地事务@Transactional参数

    一文搞懂spring boot本地事务@Transactional参数

    这篇文章主要介绍了spring boot本地事务@Transactional参数详解,本文通过示例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Java程序中使用JavaMail发送带图片和附件的邮件

    Java程序中使用JavaMail发送带图片和附件的邮件

    这篇文章主要介绍了Java程序中使用JavaMail发送带图片和附件的邮件,JavaMail是专门用来处理邮件的Java API,需要的朋友可以参考下
    2015-11-11
  • springboot整合mybatis plus与druid详情

    springboot整合mybatis plus与druid详情

    这篇文章主要介绍了springboot整合mybatis plus与druid详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的下伙伴可以参考一下
    2022-09-09
  • java如何反编译jar包并修改class文件重新打包

    java如何反编译jar包并修改class文件重新打包

    这篇文章主要介绍了java如何反编译jar包并修改class文件重新打包,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程

    Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程

    最近一段时间搭建了ssm环境,并测试了几个小项目,下面小编通过图文并茂的形式给大家分享Java SSM框架(Spring+SpringMVC+MyBatis)搭建过程,需要的朋友参考下吧
    2017-11-11
  • Spring Boot 把配置文件和日志文件放到jar外部

    Spring Boot 把配置文件和日志文件放到jar外部

    如果不想使用默认的application.properties,而想将属性文件放到jar包外面,怎么做呢?下面小编给大家带来了两种方法解决Spring Boot 把配置文件和日志文件放到jar外部问题,感兴趣的朋友一起看看吧
    2018-02-02
  • Java参数按值传递示例演示

    Java参数按值传递示例演示

    在Java中,方法参数的传递方式实际上是按值传递,接下来通过本文给大家介绍了Java参数按值传递示例演示,需要的朋友可以参考下
    2023-09-09
  • Lombok中@EqualsAndHashCode注解的使用及说明

    Lombok中@EqualsAndHashCode注解的使用及说明

    这篇文章主要介绍了Lombok中@EqualsAndHashCode注解的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 使用dynamic datasource springboot starter实现多数据源及源码分析

    使用dynamic datasource springboot starter实现多数据源及源码分析

    这篇文章主要介绍了使用dynamic-datasource-spring-boot-starter做多数据源及源码分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论