Java序列化常見(jiàn)的三個(gè)問(wèn)題
1、Java序列化與反序列化是什么?
Java序列化是指把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程,而Java反序列化是指把字節(jié)序列恢復(fù)為Java對(duì)象的過(guò)程:
- 序列化:對(duì)象序列化的最主要的用處就是在傳遞和保存對(duì)象的時(shí)候,保證對(duì)象的完整性和可傳遞性。序列化是把對(duì)象轉(zhuǎn)換成有序字節(jié)流,以便在網(wǎng)絡(luò)上傳輸或者保存在本地文件中。核心作用是對(duì)象狀態(tài)的保存與重建。
- 反序列化:客戶端從文件中或網(wǎng)絡(luò)上獲得序列化后的對(duì)象字節(jié)流,根據(jù)字節(jié)流中所保存的對(duì)象狀態(tài)及描述信息,通過(guò)反序列化重建對(duì)象。
2、為什么需要序列化與反序列化?
為什么要序列化,那就是說(shuō)一下序列化的好處嘍,序列化有什么什么優(yōu)點(diǎn),所以我們要序列化。
一:對(duì)象序列化可以實(shí)現(xiàn)分布式對(duì)象。
主要應(yīng)用例如:RMI(即遠(yuǎn)程調(diào)用Remote Method Invocation)要利用對(duì)象序列化運(yùn)行遠(yuǎn)程主機(jī)上的服務(wù),就像在本地機(jī)上運(yùn)行對(duì)象時(shí)一樣。
二:java對(duì)象序列化不僅保留一個(gè)對(duì)象的數(shù)據(jù),而且遞歸保存對(duì)象引用的每個(gè)對(duì)象的數(shù)據(jù)。
可以將整個(gè)對(duì)象層次寫入字節(jié)流中,可以保存在文件中或在網(wǎng)絡(luò)連接上傳遞。利用對(duì)象序列化可以進(jìn)行對(duì)象的"深復(fù)制",即復(fù)制對(duì)象本身及引用的對(duì)象本身。序列化一個(gè)對(duì)象可能得到整個(gè)對(duì)象序列。
三:序列化可以將內(nèi)存中的類寫入文件或數(shù)據(jù)庫(kù)中。
比如:將某個(gè)類序列化后存為文件,下次讀取時(shí)只需將文件中的數(shù)據(jù)反序列化就可以將原先的類還原到內(nèi)存中。也可以將類序列化為流數(shù)據(jù)進(jìn)行傳輸。
總的來(lái)說(shuō)就是將一個(gè)已經(jīng)實(shí)例化的類轉(zhuǎn)成文件存儲(chǔ),下次需要實(shí)例化的時(shí)候只要反序列化即可將類實(shí)例化到內(nèi)存中并保留序列化時(shí)類中的所有變量和狀態(tài)。
四:對(duì)象、文件、數(shù)據(jù),有許多不同的格式,很難統(tǒng)一傳輸和保存。
序列化以后就都是字節(jié)流了,無(wú)論原來(lái)是什么東西,都能變成一樣的東西,就可以進(jìn)行通用的格式傳輸或保存,傳輸結(jié)束以后,要再次使用,就進(jìn)行反序列化還原,這樣對(duì)象還是對(duì)象,文件還是文件。
3、如何實(shí)現(xiàn)Java序列化與反序列化
首先我們要把準(zhǔn)備要序列化類,實(shí)現(xiàn) Serializabel接口
例如:我們要Person類里的name和age都序列化
import java.io.Serializable;
public class Person implements Serializable { //本類可以序列化
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "姓名:" + this.name + ",年齡" + this.age;
}
}
然后:我們將name和age序列化(也就是把這2個(gè)對(duì)象轉(zhuǎn)為二進(jìn)制,理解為“打碎”)
package org.lxh.SerDemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamDemo { //序列化
public static void main(String[] args) throws Exception {
//序列化后生成指定文件路徑
File file = new File("D:" + File.separator + "person.ser");
ObjectOutputStream oos = null;
//裝飾流(流)
oos = new ObjectOutputStream(new FileOutputStream(file));
//實(shí)例化類
Person per = new Person("張三", 30);
oos.writeObject(per); //把類對(duì)象序列化
oos.close();
}
}
以上就是Java序列化常見(jiàn)的三個(gè)問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于Java序列化 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot創(chuàng)建子父工程過(guò)程圖解
這篇文章主要介紹了Springboot創(chuàng)建子父工程過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Java中ExecutorService和ThreadPoolExecutor運(yùn)行原理
本文主要介紹了Java中ExecutorService和ThreadPoolExecutor運(yùn)行原理,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
java實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Java Object定義三個(gè)點(diǎn)實(shí)現(xiàn)代碼
這篇文章主要介紹了Java Object定義三個(gè)點(diǎn)實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作
這篇文章主要介紹了SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java8中Optional操作的實(shí)際應(yīng)用
Optional類是一個(gè)可以為null的容器對(duì)象,如果值存在則isPresent()方法會(huì)返回true,調(diào)用get()方法會(huì)返回該對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Java8中Optional操作實(shí)際應(yīng)用的相關(guān)資料,需要的朋友可以參考下2022-02-02
Maven項(xiàng)目在new module后,pom文件顯示為Ignored pom.xml問(wèn)題
在Maven項(xiàng)目中,若創(chuàng)建過(guò)同名module后刪除,再次創(chuàng)建時(shí)可能導(dǎo)致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕跡,導(dǎo)致重建時(shí)將其視為已刪除的module,解決方法是進(jìn)入IDEA設(shè)置,找到Maven的Ignored Files設(shè)置2024-09-09
SpringBoot+VUE實(shí)現(xiàn)前后端分離的實(shí)戰(zhàn)記錄
這篇文章主要介紹了SpringBoot+VUE實(shí)現(xiàn)前后端分離的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
使用Spring Security和JWT實(shí)現(xiàn)安全認(rèn)證機(jī)制
在現(xiàn)代 Web 應(yīng)用中,安全認(rèn)證和授權(quán)是保障數(shù)據(jù)安全和用戶隱私的核心機(jī)制,Spring Security 是 Spring 框架下專為安全設(shè)計(jì)的模塊,具有高度的可配置性和擴(kuò)展性,而 JWT則是當(dāng)前流行的認(rèn)證解決方案,所以本文介紹了如何使用Spring Security和JWT實(shí)現(xiàn)安全認(rèn)證機(jī)制2024-11-11

