簡體   English   中英

如何在.NET中將自定義類型保存為二進制數據?

[英]How can I save a custom type as binary data in .NET?

我正在創建一些保存文件的東西。 在大多數情況下,它只是保存具有4個值的對象。

  • X
  • ÿ
  • ID

我一直把它保存為XML一段時間,問題是,文件開始變得巨大,因為我節省了數百到數千個這些對象,而XML對於這樣的事情來說有點笨重。 我嘗試轉換到Json,但它也太大了(我會承認,但更好)。

我的問題

我知道很多程序直接使用字節保存以節省空間。 我想做這個。 假設我有300個具有屬性X,Y,Id和Layer的對象,我怎么能將它作為字節保存到文件x並稍后加載?

我曾經嘗試過制作自己的服務器時讀取字節數。 我通常最終感到沮喪和放棄。 我希望這不太相似(我的直覺另有說法)。

編輯

哦對不起伙計們,我忘了提,我正在使用VB.NET所以所有的.NET答案都是可以接受的! :)

此外,所有這些值都是整數。

我會使用protobuf-net(我願意;我有偏見......)。 它是一個開源的.NET序列化程序,它使用屬性(嗯,在v2中是可選的)來指導它。 例如,使用C#語法(純粹為了我的方便 - 引擎不關心你使用的語言):

[ProtoContract]
public class Whatever {
    [ProtoMember(1)]
    public int X {get;set;}
    [ProtoMember(2)]
    public int Y {get;set;}
    [ProtoMember(3)]
    public long Id {get;set;}
    [ProtoMember(4)]
    public string Layer {get;set;}
}

然后,您可以序列化,例如:

List<Whatever> data = ...
Serializer.Serialize(file, data);

和反序列化:

var data = Serializer.Deserialize<List<Whatever>>(file);

任務完成; 快速二進制輸出。 可以通過手動編碼所有讀取/寫入而不需要任何標記等獲得更緊湊的東西 ,但上面的維護要少得多。 它也很容易加載到任何其他具有“協議緩沖區”實現的平台(其中大部分都是)。

替代方案:為什么不xml和zip(或其他一些壓縮)

優點:
*它仍然“人性”可讀
*文本文件通常具有良好的壓縮因子

你還在使用什么編程語言? 在C / C ++中或者你創建一個結構,數據重新解釋將結構轉換為byte *並將sizeof字節寫入文件......簡單(假設結構是固定大小的(id和layer也是固定大小的變量,如int) )

為什么不使用像MySql或SQL這樣的數據庫?

暫無
暫無

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

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