2012-05-23 133 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