Java 對象的序列化和反序列化

?

一.序列化和反序列化的概念

?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

?

??????把對象轉換為字節序列的過程稱為對象的序列化。

??????把字節序列恢復為對象的過程稱為對象的反序列化。

???? ?對象的序列化主要有兩種用途:

??????1) 把對象的字節序列永久地保存到硬盤上,通常存放在一個文件中;

? ? ? 2) 在網絡上傳送對象的字節序列。

? ? ? 在很多應用中,需要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。比如最常見的是Web服務器中的Session對象,當有 10萬用戶并發訪問,就有可能出現10萬個Session對象,內存可能吃不消,于是Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。

? ? ? 當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個Java對象轉換為字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復為Java對象。

?

二.JDK庫類中的序列化API

? ? ? java.io.ObjectOutputStream代表對象輸出流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把得到的字節序列寫到一個目標輸出流中。

???? ?java.io.ObjectInputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取字節序列,再把它們反序列化為一個對象,并將其返回。

? ? ?只有實現了Serializable和Externalizable接口的類的對象才能被序列化。Externalizable接口繼承自 Serializable接口,實現Externalizable接口的類完全由自身來控制序列化的行為,而僅實現Serializable接口的類可以 采用默認的序列化方式 。

? ? ? 對象序列化包括如下步驟:

? ? ? 1) 創建一個對象輸出流,它可以包裝一個其他類型的目標輸出流,如文件輸出流;

??????2) 通過對象輸出流的writeObject()方法寫對象。

???? ?對象反序列化的步驟如下:

???? ?1) 創建一個對象輸入流,它可以包裝一個其他類型的源輸入流,如文件輸入流;  

???? ?2) 通過對象輸入流的readObject()方法讀取對象。

?

?

三.對象序列化和反序列化案例

???? ?定義一個Person類,實現Serializable接口

?

import java.io.Serializable;
/*** 測試對象序列化和反序列化* @author * @version 1.0 V* @createTime */
public class Person implements Serializable {/*** 序列化ID*/private static final long serialVersionUID = -5809782578272943999L;private int age;private String name;private String sex;public int getAge() {return age;}public String getName() {return name;}public String getSex() {return sex;}public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}public void setSex(String sex) {this.sex = sex;}
}

?

? ? ??序列化和反序列化Person類對象

?

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.MessageFormat;
/*** 測試對象的序列化和反序列* @author * @version 1.0 V* @createTime */
public class TestObjSerializeAndDeserialize {public static void main(String[] args) throws Exception {SerializePerson();//序列化Person對象Person p = DeserializePerson();//反序列Perons對象System.out.println(MessageFormat.format("name={0},age={1},sex={2}",p.getName(), p.getAge(), p.getSex()));}/*** MethodName: SerializePerson * Description: 序列化Person對象* @author * @throws FileNotFoundException* @throws IOException*/private static void SerializePerson() throws FileNotFoundException,IOException {Person person = new Person();person.setName("gacl");person.setAge(25);person.setSex("男");// ObjectOutputStream 對象輸出流,將Person對象存儲到E盤的Person.txt文件中,完成對Person對象的序列化操作ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("E:/Person.txt")));oo.writeObject(person);System.out.println("Person對象序列化成功!");oo.close();}/*** MethodName: DeserializePerson * Description: 反序列Perons對象* @author * @return* @throws Exception* @throws IOException*/private static Person DeserializePerson() throws Exception, IOException {ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:/Person.txt")));Person person = (Person) ois.readObject();System.out.println("Person對象反序列化成功!");return person;}
}

?


?

?

?

轉自:https://my.oschina.net/xsh1208/blog/532086

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449205.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不可重入鎖和可重入鎖

不可重入鎖也叫自旋鎖 指當一個方法調用了鎖之后,如持有本鎖的另一個方法也想執行,將會進入等待。那么想要使用這個方法必須先釋放鎖方可調用 public class Lock{private boolean isLocked false;public synchronized void lock() throws InterruptedEx…

家長必看 父母須知孩子社交圈九要點(組圖)

孩子在慢慢的長大,總要接觸外面的環境、接觸到更多的人,也需要自己的社交圈。那么孩子的社交圈父母要知道9點。 1、媽媽是第一個“好朋友” 孩子社交的第一步從出生就開始了。雖然小小的他躺在那里還不能說話,但是通過哭、目光接觸、笑等表…

2020-4-1

題目一 頁面加載圖片的時候&#xff0c;可能由于各種原因導致加載失敗。 為了頁面的人性化&#xff0c;在失敗的時候通常會使用一張給定的圖片替代。 <img src"logo.gif" onerror"javascript:this.srcdefault.gif" > //上面代碼本來要加載logo.gif…

NGINX 配置超時時間

一、啥時候用到 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 用來設置請求資源和服務器返回的時間&#xff0c;保證一個請求占用固定時間&#xff0c;超出后報504超時&#xff01;這…

kettle變量(param命名參數)

1、定義&#xff1a; 編輯-設置-命名參數 在當前界面下定義參數名稱和缺省值。 2、引用&#xff1a;原始數據 通過${var}引用變量 輸出 注&#xff1a;1、字符串在命名參數引用是需要添加單引號的&#xff0c;但位置參數是不需要進行轉譯&#xff1b; 2、引用變量時需要勾選替換…

Excel操作

區間范圍計算 方法一:用IF函數 方法二:構建一個輔助區域&#xff0c;用VLOOKUP函數 方法一:用IF函數 在F3中輸入:IF(E3>90%,5%,IF(E3>80%,4%,IF(E3>70%,3%,IF(E3>60%,2%,1%)))) 向下拖動,搞定。 示例&#xff1a; IF(BB2<0.5,"50及以下",IF(AND(BB2&g…

養心靈,才能美容顏,擁有好日子(圖)

“養心&#xff0c;就是在養顏”&#xff0c;說得多好啊。我們的臉是不會說謊的鏡子&#xff0c;即使再巧妙的掩飾&#xff0c;也會在臉上顯露出蛛絲馬跡。 一個尖刻的人&#xff0c;嘴角的紋路必然多而雜;一個工于心計的人&#xff0c;臉色必定是陰沉暗淡的;一個無知的人&…

2020-4-2

題目一 利用事件冒泡原理實現了獲取td單元格內容的功能。 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> #table{ width:300px; height:100px; border:1px solid #ccc; border-c…

AGC008D K-th K

題意簡述&#xff1a;給你一個長度為\(N\)的整數序列\(x\)&#xff0c;請判斷是否存在一個滿足下列條件的整數序列\(a\)&#xff0c;如果存在&#xff0c;請構造一種方案。 1.\(a\)的長度為\(N^2\)并且滿足數字\(1,2,3,\cdots,N\)都各出現恰好\(N\)次 2.對于\(1<i<N\)&am…

(一)prometheus與grafana介紹與安裝

#&#xff08;1&#xff09;prometheus介紹 prometheus是一款 強大的監控系統和時序系統 采集數據&#xff1a; 在目標主機上安裝exporter, exporter組件會在目標處收集監控數據, 并暴露一個http接口供prometheus查詢, prometheus通過pull的方式來采集數據; 目前exporter已經采…

男人該知道的人生感悟(圖)

一、家庭篇&#xff1a; 1、孝敬自己的父母&#xff0c;男人往往沒有女人心細&#xff0c;所以你要經常提醒自己&#xff0c;常回家看看&#xff0c;不要等到“子欲養而親不待”。 2、遇到事情&#xff0c;多聽聽父母的意見&#xff0c;他們是這個世界上最愛你的人。 3、好好…

2020-4-3

題目一 如何讓IE8和IE8以下瀏覽器支持HTML5 <!–[if IE]> <script src"http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]–>上面這段代碼僅會在IE瀏覽器下運行&#xff0c;還有一點需要注意&#xff0c;在頁面中…

三維人臉前期調研

多張人臉照片進行3D人臉重建一種開源方法VisualSMeshlab目前的主流是VisualSFM&#xff08;找出各張照片中的特征點&#xff0c;進行兩兩匹配&#xff0c;根據匹配的結果&#xff0c;利用射影定理計算得到相機位置等場景信息&#xff0c;將場景信息與原始照片結合在一起得到照片…

git 報錯:was cached in the local repository, resolution will not be reattempted until the upda

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Could not resolve dependencies for project com.foreveross:gaei-syncpm:jar:0.0.1-SNAPSHOT: Failure to find com.oracle.jdbc:ojd…

6000個邊緣Kubernetes節點驅動城市80萬次智能停車,如何成為可能?

城市的街道因為汽車數量的增長越來越繁忙&#xff0c;對于駕車一族而言&#xff0c;在熱門區域尋找停車場更是無比頭痛的事情。然而與此同時&#xff0c;其實也許很多辦公樓、住宅樓、酒店和公共車庫中仍有許多付費停車的資源未被充分利用。 ParkBee就是這樣一家為城市提供智能…

英語學習之道小談

想學好英語&#xff0c;首先要培養對英語的興趣。興趣是最好的老師&#xff0c;是學習英語的巨大動力&#xff0c;有了興趣&#xff0c;學習就會事半功倍。我們都有這樣的經驗&#xff1a;喜歡的事&#xff0c;就容易堅持下去&#xff1b;不喜歡的事&#xff0c;是很難堅持下去…

2020-4-4

題目一 post方式get方式提交表單的主要區別? post一般用于傳遞較大的數據&#xff0c;在數據傳遞之前會有打包操作&#xff0c;所以可能會造成數據傳遞數據相對較慢的情況&#xff0c;不過傳輸的數據都能夠被正確的解析&#xff0c;不會出現類似于中文亂碼的狀況。通過url鏈接…

python 進程與線程(理論部分)

一、理論部分 一 什么是進程 進程&#xff1a;正在進行的一個過程或者說一個任務。而負責執行任務則是cpu。 舉例&#xff08;單核多道&#xff0c;實現多個進程的并發執行&#xff09;&#xff1a; egon在一個時間段內有很多任務要做&#xff1a;python備課的任務&#xff0c;…

Maven : 將 Jar 安裝到本地倉庫和 Jar 上傳到私服

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Jar的maven配置 <dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId&g…

Flink 1.7.2 dataset transformation 示例

Flink 1.7.2 dataset transformation 示例 源碼 https://github.com/opensourceteams/flink-maven-scala概述 Flink transformation示例map,flatMap,filter,reduce,groupBy,reduceGroup,combineGroup,Aggregate(sum,max,min)distinct,join,join funtion,leftOuterJoin,rightOut…