Java中對象的序列化方式克隆詳解
Java 序列化技術(shù)可以使你將一個對象的狀態(tài)寫入一個Byte 流里,并且可以從其它地方把該Byte 流里的數(shù)據(jù)讀出來,重新構(gòu)造一個相同的對象。
簡述:
用字節(jié)流的方式,復制Java對象
代碼:
流克隆復制函數(shù)
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);
}
}
/**
* 測試函數(shù)
*/
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);
}
}
}
測試結(jié)果:

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
一文搞懂spring boot本地事務@Transactional參數(shù)
這篇文章主要介紹了spring boot本地事務@Transactional參數(shù)詳解,本文通過示例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10
Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
這篇文章主要介紹了Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件,JavaMail是專門用來處理郵件的Java API,需要的朋友可以參考下2015-11-11
springboot整合mybatis plus與druid詳情
這篇文章主要介紹了springboot整合mybatis plus與druid詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的下伙伴可以參考一下2022-09-09
Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程
最近一段時間搭建了ssm環(huán)境,并測試了幾個小項目,下面小編通過圖文并茂的形式給大家分享Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程,需要的朋友參考下吧2017-11-11
Lombok中@EqualsAndHashCode注解的使用及說明
這篇文章主要介紹了Lombok中@EqualsAndHashCode注解的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
使用dynamic datasource springboot starter實現(xiàn)多數(shù)據(jù)源及源碼分析
這篇文章主要介紹了使用dynamic-datasource-spring-boot-starter做多數(shù)據(jù)源及源碼分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

