gpt4 book ai didi

c# - Protobuf-net 没有序列化?输出近乎纯文本

转载 作者:行者123 更新时间:2023-11-30 22:03:33 27 4
gpt4 key购买 nike

我是 protobuf 的初学者,我遇到了一个问题,希望你能帮助我:

我尝试了 protobuf-net 页面的 [示例][1] 并使其运行。我扩展了它,不仅存储了一个人,还存储了另一个包含 10000 人列表的数据类。然后我将该数据类序列化并查看输出。我希望看到一些二进制内容,但惊讶地发现几乎所有内容都是纯文本:

 π`Fred
Flat 1The Meadows
π`Fred
Flat 1The Meadows
π`Fred
Flat 1The Meadows
π`Fred
Flat 1The Meadows
π`Fred
...

我的代码非常简单:

namespace SNSClient.Assets.Scripts.GamePlay.Testing
{
[ProtoContract]
class Person
{
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Name {get; set; }
[ProtoMember(3)]
public Address Address {get;set;}
}

[ProtoContract]
class Address
{
[ProtoMember(1)]
public string Line1 {get;set;}
[ProtoMember(2)]
public string Line2 {get;set;}
}

[ProtoContract]
class MyProtoDataHolder
{
[ProtoMember(1)]
public List<Person> persons { get; set; }
}
}

对于序列化:

List<Person> dataList = new List<Person>();
for (int i = 0; i < 100000; i++)
{
var person = new Person {
id = 12345, Name = "Fred",
Address = new Address {
Line1 = "Flat 1",
Line2 = "The Meadows"
}
};

dataList.Add(person);
}
var data = new MyProtoDataHolder() {persons = dataList};

using (var file = File.Create(Application.dataPath + "/dataList.bin"))
{
Serializer.Serialize(file, data);
}

我预计我会丢失一些东西,因为输出文件的大小不是我所期望的。

感谢您的帮助!

最佳答案

您的数据以文本为主。 protobuf 有线格式将文本编码为 UTF-8,因此:

  1. 文件几乎可读(并且包含大多数文本编辑器都清晰可见的原始文本值)
  2. 文件大小与原始内容差别不大

基本上:我觉得不错。如果你想压缩它,也可以通过 GZipStreamDeflateStream 之类的东西运行它(显然是双向的)。作为旁注:如果您的真实数据将包含大量重复数据,protobuf-net 有一些选择加入标志以允许重用对象和字符串之类的东西(只存储一个标记,而不是每次都是整个字符串)——但是,将其读入其他 Protocol Buffer 库(即不是 protobuf-net)会很尴尬,因为此功能不是核心规范的一部分。

关于c# - Protobuf-net 没有序列化?输出近乎纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com