日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...

發(fā)布時(shí)間:2025/3/21 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java序列化與反序列化是什么?

Java序列化是指把Java對(duì)象轉(zhuǎn)換為字節(jié)序列的過程,而Java反序列化是指把字節(jié)序列恢復(fù)為Java對(duì)象的過程:

  • 序列化:對(duì)象序列化的最主要的用處就是在傳遞和保存對(duì)象的時(shí)候,保證對(duì)象的完整性和可傳遞性。序列化是把對(duì)象轉(zhuǎn)換成有序字節(jié)流,以便在網(wǎng)絡(luò)上傳輸或者保存在本地文件中。核心作用是對(duì)象狀態(tài)的保存與重建。
  • 反序列化:客戶端從文件中或網(wǎng)絡(luò)上獲得序列化后的對(duì)象字節(jié)流,根據(jù)字節(jié)流中所保存的對(duì)象狀態(tài)及描述信息,通過反序列化重建對(duì)象。

為什么需要序列化與反序列化?

為什么要序列化,那就是說一下序列化的好處嘍,序列化有什么什么優(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ù)庫中。

比如:將某個(gè)類序列化后存為文件,下次讀取時(shí)只需將文件中的數(shù)據(jù)反序列化就可以將原先的類還原到內(nèi)存中。也可以將類序列化為流數(shù)據(jù)進(jìn)行傳輸。

總的來說就是將一個(gè)已經(jīng)實(shí)例化的類轉(zhuǎn)成文件存儲(chǔ),下次需要實(shí)例化的時(shí)候只要反序列化即可將類實(shí)例化到內(nèi)存中并保留序列化時(shí)類中的所有變量和狀態(tài)。

四:對(duì)象、文件、數(shù)據(jù),有許多不同的格式,很難統(tǒng)一傳輸和保存。

序列化以后就都是字節(jié)流了,無論原來是什么東西,都能變成一樣的東西,就可以進(jìn)行通用的格式傳輸或保存,傳輸結(jié)束以后,要再次使用,就進(jìn)行反序列化還原,這樣對(duì)象還是對(duì)象,文件還是文件。

如何實(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();} }

一個(gè)很簡(jiǎn)單的示例,文章以應(yīng)答面試提問為主,更深了解序列化與反序列化,需要你上網(wǎng)多參考資料。

比如:

《Java對(duì)象的序列化(Serialization)和反序列化詳解》https://blog.csdn.net/yaomingyang/article/details/79321939
《Java 序列化的高級(jí)認(rèn)識(shí)》https://www.ibm.com/developerworks/cn/java/j-lo-serial/

好了,學(xué)起來!

最近三期

【15期】談?wù)勥@幾個(gè)常見的多線程面試題

【16期】你能談?wù)凥ashMap怎樣解決hash沖突嗎

【17期】什么情況用ArrayList or LinkedList呢?

與其在網(wǎng)上拼命找題? 不如關(guān)注我們~

總結(jié)

以上是生活随笔為你收集整理的Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。