1

Message::ByteSizeシリアル化されたメッセージの長さをバイト単位で調べるために、C++ API に相当する protobuf-netを探しています。

4

1 に答える 1

1

私は C++ API で遊んだことがないので、もう少し背景や情報を教えてください。このメソッドは何をしますか? おそらく使用例?

ストリームからデータを消費している場合、目立たないメッセージへの制限を自動化する「WithLengthPrefix」バージョンがあります。または、ストリームから次の長さを読み取る方法がパブリック API にあると思います。

シリアル化の代わりに長さを取得したい場合、現在のところ、最も簡単なオプションはダミー ストリームにシリアル化して長さを追跡することだと思います。奇妙なことに、protobuf-net の初期のバージョンには「作業を行わずに長さを取得する」メソッドがありましたが、protobuf-net に関する議論の後、これらを削除しました。明らかに、シリアル化されたデータは引き続き追跡されます。ただし、オブジェクトのバイナリ データ長とは API が異なるため、「無料」で利用することはできません。

ユースケースが何であるかを明確にすれば、簡単に利用できるようになると確信しています (まだ利用できない場合)。


コメントを再; それが私が疑ったことです。protobuf-net はバイナリ変換を最後まで延期するため (自己生成コードではなく、通常の .NET タイプを扱っているため)、作業を行わずにこの値を自動的に取得する方法はありません。に書き込むことでこの値を取得できるメカニズムを追加できますStream.Nullか? ただし、とにかくデータが必要な場合は、データをコピーする前に書き込みMemoryStreamとチェックを行うだけでメリットがあります。.Length

于 2010-02-22T20:43:18.180 に答える