問題タブ [protocol-buffers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - プロトコル バッファの使用方法
プロトコル バッファの使用方法を教えてください。実際、シミュレーション研究を実行するために、UNIX で実行されているプログラムと Windows で実行されている別のプログラムとの間でソケットを介してデータを交換したいと考えています。
ソケットを使用してデータを交換するプログラムは C/C++ で書かれており、somneone が次の形式でデータを交換するためにプロトコル バッファを使用するのを手伝ってくれると嬉しいです:
いくつかの方法を試しましたが、それでもデータが正しく交換されません。どんな助けでも大歓迎です
ご協力いただきありがとうございます、
c# - Protobuf-netを使用したオブジェクトのリストのシリアル化
私はファイルに対してバイナリシリアル化を行うことを検討してきましたが、protobuf-netは優れた代替手段のようです。しかし、私は少し立ち往生しています。クラスの定義を実際のシリアル化から切り離したいので、属性は使用していませんが、.protoファイルを使用することを選択しているので、オブジェクトの構造を取得しました(私は思います)
(日時は有効ですか、それともint64としてティックを使用する必要がありますか?)
しかし、protogenを使用してから、IEnumerable of Postをファイルにシリアル化して、それを読み戻す方法に固執しています。どんな助けでもいただければ幸いです
別の関連する質問は、シリアル化中にコンピューターがシャットダウンされた場合など、破損したバイナリファイルを検出するためのベストプラクティスはありますか?
protocol-buffers - protobuf メッセージの保存にバイナリ ファイルまたはテキスト ファイルを使用する必要がありますか?
Google protobuf を使用して、シリアル化されたメッセージ データをファイルに保存しています。各ファイルには複数のメッセージがあります。コードには C++ と Python の両方のバージョンがあるため、両方の言語で使用できる protobuf 関数を使用する必要があります。SerializeToArray と SerializeAsString を使用して実験しましたが、次のような不幸な状況があるようです:
SerializeToArray: 1 つの回答で示唆されているように、これを使用する最善の方法は、各メッセージの前にデータ サイズを付けることです。これは C++ ではうまく機能しますが、Python ではこれが可能ではないように見えます - 私は間違っていますか?
SerializeAsString: これにより、対応するバイナリに相当するシリアル化された文字列が生成されます。これはファイルに保存できますが、シリアル化の結果の文字の 1 つが \n の場合はどうなるでしょうか。その問題?
アップデート:
少し言い換えさせてください。私が理解しているように、C++ でバイナリ データを書き込むことはできません。これは、Python アプリケーションがデータを読み取れないためです。これは、シリアル化された文字列のメッセージしか解析できないためです。SerializeAsString
代わりに、C++ と Python の両方で使用する必要がありますか? はいの場合、そのようなデータをバイナリ ファイルではなくテキスト ファイルに格納するのがベスト プラクティスですか? 私の直感は二者択一ですが、ご覧のとおり、これは選択肢のようには見えません。
python - Python を使用して、Google protobuf メッセージのバイナリ シリアル化を取得するにはどうすればよいですか?
protobuf Python documentationに関数 SerializeAsString がありますが、これが示唆するように、バイナリ データの文字列バージョンが得られます。Python を使用して protobuf データのバイナリ配列をシリアル化および解析する方法はありますか?
protobuf メッセージをバイナリ データとしてファイルに保存する C++ アプリケーションがあります。Python を使用してファイルの読み取りと書き込みを行いたいと考えています。
c++ - Python protobuf を使用してバイナリ C++ protobuf データを読み取るにはどうすればよいですか?
Google protobuf の Python バージョンでは、次の情報しか得られません。
C++ バージョンでは次の両方が得られます。
C++ ファイルにバイナリ形式で書き込んでいますが、この方法を維持したいと考えています。そうは言っても、バイナリ データを Python に読み込み、それを文字列であるかのように解析する方法はありますか?
これは正しい方法ですか?
アップデート:
ここに新しい例と問題があります:
行に到達すると、次のfoo_bar.ParseFromString(data)
エラーが発生します。
更新 2:
バイナリ データのパディングが protobuf をスローしていたことが判明しました。メッセージが示すように、送信されるバイト数が多すぎます (この場合は、パディングを参照していました)。
SerializeToArray
このパディングは、固定長バッファーでC++ の protobuf 関数を使用することで発生します。これを解消するために、次の一時的なコードを使用しました。
ここに設計上の欠陥があると思います。可変長配列をバイナリ ファイルに書き込むように、C++ コードを再実装します。protobuf のドキュメントでアドバイスされているように、各メッセージにバイナリ サイズのプレフィックスを付けて、Python でファイルを開くときにどれだけ読むべきかを把握できるようにします。
c++ - Google の protobuf を使用してこれらのクラスを作成する方法は?
Google のプロトコル バッファに出くわしました。これは、私が書いている C++ バックエンド アプリケーションのソリューションのようです。問題は、ベクトル型に関するものが見つからないようです。ドキュメントには Repeated_types が記載されていますが、何も見つからないようです。
これらのクラスのセットがあるとします:
ベクトルである多くのメンバーを使用しているため、これらのクラスの .proto ファイルを作成するにはどうすればよいですか。これらのクラスを私が使用できる .proto ファイルに「移植」する際の助けをいただければ幸いです。
java - プロトコル バッファでの getSerializedSize() のパフォーマンス ペナルティ
getSerializedSize()
でメッセージをシリアル化する前に GPB メッセージを呼び出すと、パフォーマンスが低下しwriteTo(OutputStream)
ますか?
メッセージを出力ストリームに書き込む前に、メッセージのサイズを知る必要があります。
JavaでGPBを使用しています。
c# - C++ と通信する protobuf-net
私は、さまざまなメッセージング形式を実装するために protobuf-net を検討しています。プロト コンパイラをいじる必要がないため、コントラクト ベースのアプローチが特に気に入っています。私が情報を見つけることができなかったのは、これによりクロスプラットフォームでの作業が難しくなるのでしょうか? PB データを解析できる必要がある C++ アプリがいくつかあります。protobuf-net が PB 標準形式にシリアル化されることは理解していますが、プロト ファイルではなくコントラクト アプローチを使用すると、C++ 側はどのように解析するのでしょうか。データ?
C++ がデータを理解する必要がある (非常に少数の) ケースのために、別の proto ファイルを作成できますか (すべきですか?) もしそうなら、proto ファイルから生成された C++ クラスが no-proto ファイルの C# 側からのデータと一致することをどのように正確に知ることができますか?
java - 定義なしで Google Protobuf メッセージの構造を取得する方法
メッセージの定義なしで転送された protobuf メッセージのメッセージ構造を取得する必要があります。UnknownFieldSet メソッドを使用して、以下のようにメッセージの文字列表現を取得できました。
フィールド 2 が表すデータ構造は? UnknownFieldSet.Field.getGroupList を使用して、フィールド 3 と 4 の内容を取得できました。これは、フィールド 2 に「非推奨」のグループ構造があることを意味しますか?
c# - プロトコルバッファとJSONまたはBSON
プロトコルバッファとBSON(バイナリJSON)、または一般的なJSONのパフォーマンス特性に関する情報を持っている人はいますか?
- ワイヤーサイズ
- シリアル化速度
- デシリアライズ速度
これらは、HTTPで使用するのに適したバイナリプロトコルのようです。長期的には、C#環境の方がどちらが良いのか疑問に思っています。
これが私がBSONとProtocolBuffersで読んでいたいくつかの情報です。