2015-05-20 139 views
0

不是已經存儲爲一堆字節的對象嗎?序列化只是一個協議,強制通過網絡傳輸這些字節的方式。在序列化中,將對象轉換爲字節流的含義是什麼?

+0

那麼,序列化不只是傳輸一個內存映像,它確實使用已知的傳輸順序和協議。 [鏈接](http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html)。我想你可以說「只是力量」,儘管這似乎使系列化所需的工作變得微不足道。 – markspace

回答

2

從技術上講,是的,一臺計算機中的所有東西都表示爲的某處。所以任何內存中的對象都是「一堆字節」。

但是,在實時應用程序中使用時,該對象的狀態可能會更改。它在不斷變化。並且該狀態可以被存儲/更改/已知/等。跨越多種媒介。

序列化是將對象的狀態捕獲到某種靜態形式的過程,它可以被持久化爲更靜態的介質。具體來說,這些信息需要包含以後重新創建對象所需的一切。

它是什麼形式或媒體並不重要。數據可以是原始二進制,JSON,XML,文本,任何自定義格式等。存儲介質可以是文件系統,數據庫,網絡連接,活動內存等等。它可以存儲幾毫秒或幾百年。


作爲一個比喻,考慮一個人。有很多信息構成了「一個人」的一切。你會如何「序列化」一個人?

你可以將他們的DNA序列保存到計算機(一個簡單的字符陣列就可以實現)。但是,這是否存儲該人的狀態?您可以從該數據重新創建a人,但您是否可以在相同狀態下重新創建同一個人?不,他們所有的回憶都會丟失。

因此,在嘗試序列化此人時,我們發現代表一個人的狀態的信息不僅包含用於創建此人的原始信息。該狀態信息在人的壽命期間被存儲在單獨的介質中,並且不容易獲得。但是爲了序列化這個人,這是必要的。

繼續比喻......考慮來自Star Trek的運輸者。 「對象」是一個人,並且該人被成功轉換爲數據流,然後在傳輸的另一端重新構建該數據流。兩個運輸系統是分開的,只是交換信息。這些信息足以將原始對象重新創建爲序列化的確切狀態。

0

「序列化」意味着將對象轉換爲另一個狀態以達到傳輸或持久的目的。

不是已經存儲爲一堆字節的對象嗎?是的,但那不是重點。重點是堅持和轉移。以圖像爲例:這是內存中的一件事,另一種保存爲JPEG,另一種保存爲GIF或TIFF或BMP。

序列化只是一個協議,強制某些命令如何通過網絡傳輸時組織這些字節?請參閱關於序列化含義的第一個問題的答案

相關問題