Message::ByteSize
シリアル化されたメッセージの長さをバイト単位で調べるために、C++ API に相当する protobuf-netを探しています。
1 に答える
私は C++ API で遊んだことがないので、もう少し背景や情報を教えてください。このメソッドは何をしますか? おそらく使用例?
ストリームからデータを消費している場合、目立たないメッセージへの制限を自動化する「WithLengthPrefix」バージョンがあります。または、ストリームから次の長さを読み取る方法がパブリック API にあると思います。
シリアル化の代わりに長さを取得したい場合、現在のところ、最も簡単なオプションはダミー ストリームにシリアル化して長さを追跡することだと思います。奇妙なことに、protobuf-net の初期のバージョンには「作業を行わずに長さを取得する」メソッドがありましたが、protobuf-net に関する議論の後、これらを削除しました。明らかに、シリアル化されたデータは引き続き追跡されます。ただし、オブジェクトのバイナリ データ長とは API が異なるため、「無料」で利用することはできません。
ユースケースが何であるかを明確にすれば、簡単に利用できるようになると確信しています (まだ利用できない場合)。
コメントを再; それが私が疑ったことです。protobuf-net はバイナリ変換を最後まで延期するため (自己生成コードではなく、通常の .NET タイプを扱っているため)、作業を行わずにこの値を自動的に取得する方法はありません。に書き込むことでこの値を取得できるメカニズムを追加できますStream.Null
か? ただし、とにかくデータが必要な場合は、データをコピーする前に書き込みMemoryStream
とチェックを行うだけでメリットがあります。.Length