协议缓冲区如何处理已经压缩的字节[]的压缩?
伪示例:
[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);
答案 0 :(得分:1)
protobuf规范不包括 任何 压缩,除非您计算整数数据的varint
编码。 C#中的byte[]
被视为 protobuf bytes
类型,这意味着它只是字节的长度前缀原始转储。因此,如果CompressedFoo
(仅作为示例)12个字节,它将以14个字节序列化它,由以下部分组成:
2
,表示长度前缀)和字段编号(2
,来自[ProtoMember(2)]
),捣碎(“移位”)在一起, varint encoded 12
),varint encoded CompressedFoo
“按原样”)