java中的序列化?

所謂序列化是指把一個對象通過某種規則轉化爲一串二進制串,字符串就是一種二進制串。但爲何要把對象轉化爲二進制串呢?因爲我們需要保存或者在網絡上傳輸它們,而存在於 JVM 內存中的對象並沒有使用者可見的二進制形式。雖然內存中的所有東西仍然是二進制的,但 JVM 向我們屏蔽了內存操作相關的信息,我們不一定能確定某個 JVM 實現是如何在內存中存儲和組織一個 Java 對象的內容的(C/C++ 就可以直接獲取內存塊來作爲序列化的二進制串)。

當然,光序列化是不夠的,我們還需要反序列化,也就是如何從二進制串重新轉回對象。這樣當我們從文件中讀取或者在網絡的另一頭收到某個對象的二進制串之後,我們才能重新還原回那個對象。

Java 默認實現了自己的序列化,就是使用的內存數據。然而除了 Java 自己的序列化,我們還有很多中序列化方式,例如 hessian。或者說將 Java 對象轉成 json、xml 也是一種序列化。

舉一個非常簡單的例子,例如我們有一個對象 Integer v = 1;。當我們使用 hessian 對其序列化的時候,我們可能會拿到 I1 這樣的字串(並不確定 hessian 生成的串是不是真的是這樣,但是也差不多),其中 i 表示類型是 Integer,而 1 就是這個變量的值,而 I1 就是序列化後的二進制串(一個字符串)。

  如果不想 序列化一個變量 可以使用transient關鍵字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章