我正在BinaryFormatter和Protobuf-net序列化器进行一些比较,并对我发现的内容非常满意,但奇怪的是,Protobuf-net设法将对象序列化为比我刚写入值时更小的字节数组.将每个属性转换为没有任何元数据的字节数组.
我知道如果设置AsReference为Protobuf-net支持字符串实习true,但在这种情况下我不是这样做的,那么Protobuf-net默认提供一些压缩吗?
以下是您可以运行以查看的一些代码:
var simpleObject = new SimpleObject
{
Id = 10,
Name = "Yan",
Address = "Planet Earth",
Scores = Enumerable.Range(1, 10).ToList()
};
using (var memStream = new MemoryStream())
{
var binaryWriter = new BinaryWriter(memStream);
// 4 bytes for int
binaryWriter.Write(simpleObject.Id);
// 3 bytes + 1 more for string termination
binaryWriter.Write(simpleObject.Name);
// 12 bytes + 1 more for string termination
binaryWriter.Write(simpleObject.Address);
// 40 bytes for 10 ints
simpleObject.Scores.ForEach(binaryWriter.Write);
// 61 bytes, …Run Code Online (Sandbox Code Playgroud)