JAVA中對象的序列化的作用?

1、序列化是干什么的?

 簡單說就是為了保存在內存中的各種對象的狀態,并且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存Object States,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。
2、什么情況下需要序列化 
a)當你想把的內存中的對象保存到一個文件中或者數據庫中時候;
b)當你想用套接字在網絡上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;
3、當對一個對象實現序列化時,究竟發生了什么?在沒有序列化前,每個保存在堆(Heap)中的對象都有相應的狀態(state),即實例變量(instance ariable)比如:Foo myFoo = new Foo(); 
myFoo .setWidth(37); 
myFoo.setHeight(70); 當通過下面的代碼序列化之后,MyFoo對象中的width和Height實例變量的值(37,70)都被保存到foo.ser文件中,這樣以后又可以把它 從文件中讀出來,重新在堆中創建原來的對象。當然保存時候不僅僅是保存對象的實例變量的值,JVM還要保存一些小量信息,比如類的類型等以便恢復原來的對 象。FileOutputStream fs = new FileOutputStream("foo.ser"); 
ObjectOutputStream os = new ObjectOutputStream(fs); 
os.writeObject(myFoo); 4、實現序列化(保存到一個文件)的步驟a)Make a FileOutputStream 
java 代碼
FileOutputStream fs = new FileOutputStream("foo.ser"); 
b)Make a ObjectOutputStream java 代碼
ObjectOutputStream os = new ObjectOutputStream(fs); 
c)write the objectjava 代碼
os.writeObject(myObject1); 
os.writeObject(myObject2); 
os.writeObject(myObject3); 
d) close the ObjectOutputStreamjava 代碼
os.close(); 5、舉例說明java 代碼
import java.io.*; public class Box implements Serializable 
{ 
private int width; 
private int height; public void setWidth(int width){ 
this.width = width; 
} 
public void setHeight(int height){ 
this.height = height; 
} public static void main(String[] args){ 
Box myBox = new Box(); 
myBox.setWidth(50); 
myBox.setHeight(30); try{ 
FileOutputStream fs = new FileOutputStream("foo.ser"); 
ObjectOutputStream os = new ObjectOutputStream(fs); 
os.writeObject(myBox); 
os.close(); 
}catch(Exception ex){ 
ex.printStackTrace(); 
} 
} } 6、相關注意事項a)當一個父類實現序列化,子類自動實現序列化,不需要顯式實現Serializable接口;
b)當一個對象的實例變量引用其他對象,序列化該對象時也把引用對象進行序列化;
c)并非所有的對象都可以序列化,,至于為什么不可以,有很多原因了,比如:1.安全方面的原因,比如一個對象擁有private,public等field,對于一個要傳輸的對象,比如寫到文件,或者進行rmi傳輸 等等,在序列化進行傳輸的過程中,這個對象的private等域是不受保護的。2. 資源分配方面的原因,比如socket,thread類,如果可以序列化,進行傳輸或者保存,也無法對他們進行重新的資源分 配,而且,也是沒有必要這樣實現。

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

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

相關文章

leetcode559. N叉樹的最大深度

給定一個 N 叉樹,找到其最大深度。 最大深度是指從根節點到最遠葉子節點的最長路徑上的節點總數。 例如,給定一個 3叉樹 : 我們應返回其最大深度,3。 說明: 樹的深度不會超過 1000。 樹的節點總不會超過 5000。 思路見代碼 /* // De…

leetcode1491. 工資平均值 這也叫題?也太簡單了吧

給你一個整數數組 salary ,數組里每個數都是 唯一 的,其中 salary[i] 是第 i 個員工的工資。 請你返回去掉最低工資和最高工資以后,剩下員工工資的平均值。 示例 1: 輸入:salary [4000,3000,1000,2000] 輸出&#x…

leetcode1207. 獨一無二的出現次數

給你一個整數數組 arr,請你幫忙統計數組中每個數的出現次數。 如果每個數的出現次數都是獨一無二的,就返回 true;否則返回 false。 示例 1: 輸入:arr [1,2,2,1,1,3] 輸出:true 解釋:在該數組…

leetcode1085. 最小元素各數位之和 py不止是字符串的神!

給你一個正整數的數組 A。 然后計算 S,使其等于數組 A 當中最小的那個元素各個數位上數字之和。 最后,假如 S 所得計算結果是 奇數 的請你返回 0,否則請返回 1。 示例 1: 輸入:[34,23,1,24,75,33,54,8] 輸出:0 解釋…

leetcode709. 轉換成小寫字母 最秀狼人做法(比狠多一點)

實現函數 ToLowerCase(),該函數接收一個字符串參數 str,并將該字符串中的大寫字母轉換成小寫字母,之后返回新的字符串。 示例 1: 輸入: "Hello" 輸出: "hello" 示例 2: 輸入: "here"…

leetcode1299. 將每個元素替換為右側最大元素

給你一個數組 arr ,請你將每個元素用它右邊最大的元素替換,如果是最后一個元素,用 -1 替換。 完成所有替換操作后,請你返回這個數組。 示例: 輸入:arr [17,18,5,4,6,1] 輸出:[18,6,6,6,1,-1]…

leetcode1119. 刪去字符串中的元音 小學難度

給你一個字符串 S,請你刪去其中的所有元音字母( a,e,i,o,u),并返回這個新字符串。 示例 1: 輸入:"leetcodeisacommunityforcoders" 輸出&#xff…

leetcode771. 寶石與石頭

給定字符串J 代表石頭中寶石的類型,和字符串 S代表你擁有的石頭。 S 中每個字符代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。 J 中的字母不重復,J 和 S中的所有字符都是字母。字母區分大小寫,因此"a…

leetcode771. 寶石與石頭 py永遠的神!

給你一個整數數組 nums,請你返回其中位數為 偶數 的數字的個數。 示例 1: 輸入:nums [12,345,2,6,7896] 輸出:2 解釋: 12 是 2 位數字(位數為偶數) 345 是 3 位數字(位數為奇數&a…

SpringMVC+Spring3.2+Hibernate4整合實例

近日抽時間學習了一下SpringMVC,總體感覺還不錯,相對于Struts2來說,感覺SpringMVC更加的靈活,由于現在很多公司都在用SpringMVC,所以也學習一下,希望接下來的項目可以使用,閑話不說了&#xff0…

《劍指offer》全解(圖文結合,通俗易懂,一篇看爽)

3. 數組中重復的數字 題目鏈接 牛客網 題目描述 在一個長度為 n 的數組里的所有數字都在 0 到 n-1 的范圍內。數組中某些數字是重復的,但不知道有幾個數字是重復的,也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 Input: {2, 3, 1, 0…

《不改變的CSDN,沒有未來》,前50的專家實名發文

三十年河東,三十年河西,這句話在互聯網戰場上,應該改為十年。很多上個時代的王,掉隊了。 CSDN的歷史和中國互聯網產品的發展歷史有一點像,更確切的說,是和某些互聯網企業更像。歷史歪歪斜斜的寫著幾個字&am…

【半佛仙人】他從不買水軍,憑什么一年內做到B站500萬粉絲?

導語 半佛仙人從BAT產品經理跳轉到自媒體行業,短短一年,就在B站擁有500萬粉絲。他坦言自己從不買水軍,只相信科技賦能內容。今天他就要跟大家分享如何用產品的思維做出爆款內容。 1 What:何為我認為的產品思維 我認為產品思維就是…

Redis 多線程網絡模型全面揭秘

導語 一文帶你完全吃透 Redis 整個核心網絡模型的原理和源碼。 目錄 導言 Redis 有多快? Redis 為什么快? Redis 為何選擇單線程? 避免過多的上下文切換開銷 避免同步機制的開銷 簡單可維護 Redis 真的是單線程? 單線程事…

leetcode867. 轉置矩陣

給你一個二維整數數組 matrix, 返回 matrix 的 轉置矩陣 。 矩陣的 轉置 是指將矩陣的主對角線翻轉,交換矩陣的行索引與列索引。 示例 1: 輸入:matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出:[[1,4,7],[2,5,8],[3,6,9]] 示…

SSH項目中根據Hibernate的映射文件生成數據庫表的方案:

1.首先在項目的根目錄下配置:hibernate.cfg.xml文件&#xff1a;如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "ht…

leetcode258. 各位相加(簡單題,但是你不看答案想不出來)

給定一個非負整數 num&#xff0c;反復將各個位上的數字相加&#xff0c;直到結果為一位數。 示例: 輸入: 38 輸出: 2 解釋: 各位相加的過程為&#xff1a;3 8 11, 1 1 2。 由于 2 是一位數&#xff0c;所以返回 2。 進階: 你可以不使用循環或者遞歸&#xff0c;且在 O(…

leetcode896. 單調數列

如果數組是單調遞增或單調遞減的&#xff0c;那么它是單調的。 如果對于所有 i < j&#xff0c;A[i] < A[j]&#xff0c;那么數組 A 是單調遞增的。 如果對于所有 i < j&#xff0c;A[i]> A[j]&#xff0c;那么數組 A 是單調遞減的。 當給定的數組 A 是單調數組…

leetcode884. 兩句話中的不常見單詞(你肯定會被驚呆了)

給定兩個句子 A 和 B 。 &#xff08;句子是一串由空格分隔的單詞。每個單詞僅由小寫字母組成。&#xff09; 如果一個單詞在其中一個句子中只出現一次&#xff0c;在另一個句子中卻沒有出現&#xff0c;那么這個單詞就是不常見的。 返回所有不常用單詞的列表。 您可以按任何…

正則表達式必知必會

一、概述 正則表達式用于文本內容的查找和替換。 正則表達式內置于其它語言或者軟件產品中&#xff0c;它本身不是一種語言或者軟件。 正則表達式在線工具 二、匹配單個字符 . 可以用來匹配任何的單個字符&#xff0c;但是在絕大多數實現里面&#xff0c;不能匹配換行符&a…