JNI を介してネイティブ C++ コードを呼び出す Java コードがあります。現在、C++ コードによって生成された結果は、XML 文字列として返されます。
これを Protocol Buffers オブジェクトに置き換えたいと思います。
ここで、PB オブジェクトを生成した後に 2 つのオプションがあります。
- 文字列にシリアライズして返す
- オブジェクト自体を試して返します。
誰かが2番目のオプションを試しましたか? それはうまくいきますか?潜在的な問題はありますか?
ありがとう。
JNI を介してネイティブ C++ コードを呼び出す Java コードがあります。現在、C++ コードによって生成された結果は、XML 文字列として返されます。
これを Protocol Buffers オブジェクトに置き換えたいと思います。
ここで、PB オブジェクトを生成した後に 2 つのオプションがあります。
誰かが2番目のオプションを試しましたか? それはうまくいきますか?潜在的な問題はありますか?
ありがとう。
「 Protocol Buffers object 」が何を意味するのかについて、あなたの質問はやや不明確です。によって.protoファイルから生成されたメッセージオブジェクトを意味していると思いますprotoc
。それなら仕方ないと断言します。PBシリアライゼーション フォームは確かにクロス プラットフォームおよびクロス言語ですが、実装はそうではありません。JNI が提供する膨大な数の C 関数のおかげで、C(++) で Java オブジェクトのメソッドを呼び出すことができますが、Java から (C++ オブジェクトで) 同じことを行うためのリバース インターフェイスはありません。
とにかく、PB オブジェクトはインストルメント化された構造体にすぎません。インストルメンテーションは、PB シリアル化にのみ役立ちます。シリアライゼーションを使用しない場合、PB は本質的に役に立ちません。XML が少なくともある程度安定した構造を持っている場合 (PB は未知の構造に対応しません)、それをプレーンな Java オブジェクトに反映し、JNI を介して C++ 側に渡し、記載されているすべての JNI 関数を使用して、そこに入力してみませんか? ?