ProtoBuf-Net压缩已经压缩了吗?

时间:2012-05-23 08:17:48

标签: protobuf-net

协议缓冲区如何处理已经压缩的字节[]的压缩?

伪示例:

[ProtoContract]
class Foo
{
  [ProtoMember(1)]
  public string Bar{ get; set; }

  [ProtoMember(2)]
  public byte[] CompressedFoo { get; set; }
}


// proto is my ProtocolBuffer.Net utility class

Foo _foo = new Foo() { Bar = "Hello World"; };

Foo _foo2 = new Foo() { Bar = "Goodbye cruel world"; };
_foo2.CompressedFoo = proto.Compress(_foo);

byte[] compressedFoo2 = proto.Compress(_foo2);

1 个答案:

答案 0 :(得分:1)

protobuf规范不包括 任何 压缩,除非您计算整数数据的varint编码。 C#中的byte[]被视为 protobuf bytes类型,这意味着它只是字节的长度前缀原始转储。因此,如果CompressedFoo(仅作为示例)12个字节,它将以14个字节序列化它,由以下部分组成:

  • 数据类型的1个字节(2,表示长度前缀)和字段编号(2,来自[ProtoMember(2)]),捣碎(“移位”)在一起, varint encoded
  • 1个字节表示数据长度(12),varint encoded
  • 数据的12个字节(从CompressedFoo“按原样”)