不是已經存儲爲一堆字節的對象嗎?序列化只是一個協議,強制通過網絡傳輸這些字節的方式。在序列化中,將對象轉換爲字節流的含義是什麼?
回答
從技術上講,是的,一臺計算機中的所有東西都表示爲的某處。所以任何內存中的對象都是「一堆字節」。
但是,在實時應用程序中使用時,該對象的狀態可能會更改。它在不斷變化。並且該狀態可以被存儲/更改/已知/等。跨越多種媒介。
序列化是將對象的狀態捕獲到某種靜態形式的過程,它可以被持久化爲更靜態的介質。具體來說,這些信息需要包含以後重新創建對象所需的一切。
它是什麼形式或媒體並不重要。數據可以是原始二進制,JSON,XML,文本,任何自定義格式等。存儲介質可以是文件系統,數據庫,網絡連接,活動內存等等。它可以存儲幾毫秒或幾百年。
作爲一個比喻,考慮一個人。有很多信息構成了「一個人」的一切。你會如何「序列化」一個人?
你可以將他們的DNA序列保存到計算機(一個簡單的字符陣列就可以實現)。但是,這是否存儲該人的狀態?您可以從該數據重新創建a人,但您是否可以在相同狀態下重新創建同一個人?不,他們所有的回憶都會丟失。
因此,在嘗試序列化此人時,我們發現代表一個人的狀態的信息不僅包含用於創建此人的原始信息。該狀態信息在人的壽命期間被存儲在單獨的介質中,並且不容易獲得。但是爲了序列化這個人,這是必要的。
繼續比喻......考慮來自Star Trek的運輸者。 「對象」是一個人,並且該人被成功轉換爲數據流,然後在傳輸的另一端重新構建該數據流。兩個運輸系統是分開的,只是交換信息。這些信息足以將原始對象重新創建爲序列化的確切狀態。
「序列化」意味着將對象轉換爲另一個狀態以達到傳輸或持久的目的。
不是已經存儲爲一堆字節的對象嗎?是的,但那不是重點。重點是堅持和轉移。以圖像爲例:這是內存中的一件事,另一種保存爲JPEG,另一種保存爲GIF或TIFF或BMP。
序列化只是一個協議,強制某些命令如何通過網絡傳輸時組織這些字節?請參閱關於序列化含義的第一個問題的答案
- 1. 將字節流轉換爲對象
- 2. 將不可序列化的對象轉換爲字節數組
- 3. 將字節流反序列化爲對象
- 4. 將java字節轉換爲c#字節(序列化問題)
- 5. 序列化:將字節轉換爲字節?
- 6. Python 3.4將字節字節字節轉換爲字節對象
- 7. 將JSON對象轉換爲序列化的JSON字符串
- 8. 將對象轉換爲可序列化對象的術語
- 9. 將流轉換爲對象?
- 10. 轉換爲可序列化的對象
- 11. 當將json對象轉換爲字符串或字節時,Json對象包含轉換爲「\ n」的換行符
- 12. 將對象轉換爲字節數組
- 13. 將.NET對象轉換爲(字節*)
- 14. 將字節[]轉換爲對象
- 15. 將對象轉換爲字節[]
- 16. 將字節數組轉換爲對象
- 17. 使用節儉json序列化將對象轉換爲JSON字符串
- 18. 使用序列化將對象[]數組轉換爲字符串[]
- 19. 如何將Interop.Word.Document對象轉換爲流或字節數組?
- 20. 在C#中序列化一個對象並獲取字節流
- 21. 包含JodaTime序列化的自定義對象對象轉換成JSON
- 22. 是有什麼辦法字節數組轉換爲Blob對象在node.js中
- 23. 如何將Dic Post轉換爲Django中的序列化對象?
- 24. 將對象列表轉換爲c#中的數組 - 「x => x.Name」語法的含義是什麼?
- 25. 將hexdump轉換爲字節序列
- 26. 反序列化json對象並將內部對象轉換爲字符串值?
- 27. 爲什麼Viewstate只能包含可序列化的對象?
- 28. 在Python中將對象轉換爲列表的最佳方式是什麼?
- 29. 在$ .getJSON中「url」+「序列化表單」的含義是什麼
- 30. 將NSData字節轉換爲自定義對象
那麼,序列化不只是傳輸一個內存映像,它確實使用已知的傳輸順序和協議。 [鏈接](http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html)。我想你可以說「只是力量」,儘管這似乎使系列化所需的工作變得微不足道。 – markspace