簡體   English   中英

Java中序列化的目的是什么?

[英]What is the purpose of Serialization in Java?

我已經閱讀了很多關於序列化的文章,以及它如何如此出色和出色,但 arguments 都沒有足夠的說服力。 我想知道是否有人真的可以告訴我通過序列化 class 可以真正實現什么?

讓我們首先定義序列化,然后我們可以討論為什么它如此有用。

序列化只是將現有對象轉換為字節數組。 此字節數組表示對象的類,對象的版本以及對象的內部狀態。 然后可以在JVM運行相同代碼之間使用此字節數組來傳輸/讀取對象。

我們為什么要這樣做?

有幾個原因:

  • 通信:如果您有兩台運行相同代碼的計算機,並且需要進行通信,則一台計算機可以輕松地構建一個包含其要傳輸的信息的對象,然后將該對象序列化到另一台計算機。 這不是最好的溝通方式,但它完成了工作。

  • 持久性:如果要將特定操作的狀態存儲在數據庫中,可以將其輕松序列化為字節數組,並存儲在數據庫中以供以后檢索。

  • 深層復制:如果您需要Object的精確副本,並且不想編寫自己的專用clone()類,只需將對象序列化為字節數組,然后將其反序列化為另一個對象實現了這個目標。

  • 緩存:真的只是上面的應用程序,但有時一個對象需要10分鍾來構建,但只需要10秒鍾來反序列化。 因此,不要抓住內存中的巨大對象,而是通過序列化將其緩存到文件中,並在以后需要時將其讀取。

  • 交叉JVM同步:序列化適用於可能在不同體系結構上運行的不同JVM。

在運行應用程序時,它的所有對象都存儲在內存(RAM)中。 當您退出時,操作系統將回收該內存,並且您的程序基本上“忘記”運行時發生的所有事情。 序列化可以通過讓您的應用程序將對象保存到磁盤來解決這個問題,以便它可以在下次啟動時將其讀回。 如果您的應用程序將提供保存/共享以前狀態的任何方式,您將需要某種形式的序列化。

我可以分享我的故事,我希望它會提供一些想法,為什么序列化是必要的。 但是,您的問題的答案已經非常詳細。

我有幾個項目需要加載和讀取一堆文本文件。 這些文件包含停用詞,生物醫學動詞,生物醫學縮寫詞,語義相互連接的詞等。這些文件的內容很簡單: 單詞

現在,對於每個項目,我需要讀取每個文件中的單詞並將它們放入不同的數組中; 由於文件的內容從未改變,因此在第一個項目之后,它成為一個常見但多余的任務。

所以,我所做的是創建了一個對象來讀取每個文件並填充各個數組(對象的實例變量)。 然后我序列化了對象,然后為后面的項目,我簡單地反序列化它們。 我沒有必要一次又一次地讀取文件並填充數組。

在本質上

序列化是將包含彼此引用的一組對象實例轉換為線性字節流的過程,然后可以通過套接字發送,存儲到文件或簡單地作為數據流進行操作

請參閱Wiki的用法:

序列化具有許多優點。 它提供:

  1. 一種持久化對象的方法,比將它們的屬性寫入磁盤上的文本文件更方便,並通過讀回來重新組裝它們。
  2. 發出遠程過程調用的方法,例如在SOAP中
  3. 一種分發對象的方法,特別是在COM,CORBA等軟件組件中。
  4. 一種用於檢測時變數據的變化的方法。

最明顯的是,您可以通過網絡傳輸序列化類,並且接收者可以構建原始實例的副本。 同樣,您可以將序列化結構保存到文件系統。

另外,請注意序列化是遞歸的,因此如果需要,您可以在一個swell foop中序列化整個異構數據結構。

序列化對象在空間中維護狀態,它們可以通過網絡,文件系統等傳輸...而且時間,它們可以比創建它們的JVM更長。

有時這很有用。

我使用序列化對象來標准化我傳遞給函數或類構造函數的參數。 傳遞一個序列化bean比一長串參數更清晰。 結果是代碼更容易閱讀和調試。

為了學習的簡單目的(注意,我說學習,我沒說最好,甚至不好,但只是為了理解東西),你可以將你的數據保存到計算機上的文本文件中,然后有一個程序讀取該信息,並根據文件,您可以讓您的程序以不同的方式響應。 如果你更高級,它不一定必須是txt文件,而是其他東西。

另一方面,序列化將事物直接置於計算機語言中。 這就像你用西班牙語告訴西班牙語的計算機,而不是用法語告訴它,迫使它學習法語,然后通過翻譯所有內容將東西保存到其原生西班牙語中。 這不是最技術密集的答案,我只是想用通用語言格式創建一個可理解的例子。

序列化也更快,因為在Java中,對象在堆上處理,並且比在堆棧上表示為基元的時間要長得多。 速度,速度,速度。 從程序員的角度來看,文件處理較少。

在日常生活中使用序列化的經典示例之一是任何計算機游戲中的“保存游戲”選項。 當玩家決定在游戲中保存他的進度時,應用程序將保存的游戲 state 通過序列化寫入文件,當玩家“加載游戲”時讀取序列化文件並重新創建游戲 state。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM