簡體   English   中英

為什么我們不能序列化這些對象?

[英]why we can't Serialize these objects?

為什么我們不能將對象序列化為隨機訪問文件? 另一方面,我們可以將對象序列化為順序訪問文件?

“” C#沒有提供在運行時獲取對象大小的方法。 這意味着,如果我們序列化該類,我們將無法保證固定長度的記錄大小“”(來自我讀過的書)。

因此我們無法讀取隨機訪問文件,因為我們不知道文件中的每個對象大小,因此我們該怎么做?

任何標有SerializableAttribute屬性的對象都可以序列化(在大多數情況下)。 序列化的結果始終指向流,該流很可能是文件輸出流。

您是在問為什么對象圖不能部分反序列化嗎? .NET序列化僅可[反序列化]完整的對象圖。 否則,您將不得不轉向其他序列化格式化程序,或者編寫自己的格式化程序。

要直接隨機訪問文件,必須使用支持查找的流打開文件。

編輯:

從序列化中尋求結果流沒有任何實際目的-只有序列化格式化程序才知道其中有什么,並且應該始終在流的開始就得到反饋。

用於將數據持久化為其他結構; 為此,請分兩個階段進行操作:首先,將序列化字節定向到[即有內存支持的]流,您隨后可以從中讀取大小,然后使用所說的大小知識將數據寫入實際的后備存儲中。

您無法預測序列化對象的大小,因為序列化表示形式可能與運行時表示形式相差很大。

如果僅使用基本類型,並且使用BinaryWriter進行編寫,那么仍然有可能實現對輸出大小的精確控制-但這本身不是序列化。

.NET中的默認二進制序列化會序列化整個對象圖,從本質上來說,它是一個圖,它沒有恆定的大小,這意味着每個序列化對象(記錄)都沒有恆定的大小,從而阻止了隨機訪問。

為了能夠隨機訪問文件中的任何記錄,請編寫您自己的類的二進制序列化的實現,或使用數據庫。 如果您需要一個簡單的,無需安裝的單線程數據庫引擎,請查看SQL Server Compact

暫無
暫無

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

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