2012-05-23 92 views
2

协议缓冲区如何处理已压缩字节[]的压缩?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

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

  • 1字节的数据类型(2,以指示长度前缀)和场数(2,从[ProtoMember(2)]),捣碎(“偏移”)一起和varint编码的数据的长度(12
  • 1字节,varint编码
  • 12个字节的数据(取“原样”从CompressedFoo
+0

Marc,T为你的答复。 – user1412044

+0

感谢您的回复 - 我已经问过关于此链接的另一个问题:http://stackoverflow.com/questions/10719169/protobuf-net-performance – user1412044