protobuf-net を使用してバイト配列をシリアライズし、クライアント側をデシリアライズするためにソケット経由で送信することは可能ですか? 送信されるデータを圧縮/縮小する効率的な方法を探しています。誰かが、protobuf-net が最善の方法だと言っていました。私はそれについてどのように行くか考えていますか?
助けてくれてありがとう!
protobuf-net を使用してバイト配列をシリアライズし、クライアント側をデシリアライズするためにソケット経由で送信することは可能ですか? 送信されるデータを圧縮/縮小する効率的な方法を探しています。誰かが、protobuf-net が最善の方法だと言っていました。私はそれについてどのように行くか考えていますか?
助けてくれてありがとう!
Protobuf-net はserializerであり、複雑なオブジェクト構造をワイヤ経由で送信できる基本的な表現に縮小することを目的としています。圧縮は使用しません。圧縮が必要な場合は、GZipStream などを使用します。実際、byte[] の protobuf 表現は、データの長さ (varint として) の後に元の byte[] が続きます。protobuf の実装はそれを減らしません。
したがって、元の byte[] を「そのまま」送信するか、GZipStream などを使用してサイズを縮小してみてください。これは常に可能であるとは限らず、一部のデータ圧縮ツールではサイズが大きくなる可能性があることに注意してください。
7Zip ( http://www.7-zip.org/sdk.html ) の LZMA SDK を使用して、protobuf されたオブジェクトのバイト配列表現を圧縮/解凍することで、大幅な改善が得られました。たとえば、1114 バイトの配列は 740 に縮小されました。しかし、Marc が言ったように、走行距離は異なる場合があります。