2

JNI を介してネイティブ C++ コードを呼び出す Java コードがあります。現在、C++ コードによって生成された結果は、XML 文字列として返されます。

これを Protocol Buffers オブジェクトに置き換えたいと思います。

ここで、PB オブジェクトを生成した後に 2 つのオプションがあります。

  • 文字列にシリアライズして返す
  • オブジェクト自体を試して返します。

誰かが2番目のオプションを試しましたか? それはうまくいきますか?潜在的な問題はありますか?

ありがとう。

4

2 に答える 2

2

「 Protocol Buffers object 」が何を意味するのかについて、あなたの質問はやや不明確です。によって.protoファイルから生成されたメッセージオブジェクトを意味していると思いますprotoc。それなら仕方ないと断言します。PBシリアライゼーション フォームは確かにクロス プラットフォームおよびクロス言語ですが、実装はそうではありません。JNI が提供する膨大な数の C 関数のおかげで、C(++) で Java オブジェクトのメソッドを呼び出すことができますが、Java から (C++ オブジェクトで) 同じことを行うためのリバース インターフェイスはありません。

とにかく、PB オブジェクトはインストルメント化された構造体にすぎません。インストルメンテーションは、PB シリアル化にのみ役立ちます。シリアライゼーションを使用しない場合、PB は本質的に役に立ちません。XML が少なくともある程度安定した構造を持っている場合 (PB は未知の構造に対応しません)、それをプレーンな Java オブジェクトに反映し、JNI を介して C++ 側に渡し、記載されているすべての JNI 関数を使用して、そこに入力してみませんか? ?

于 2012-11-21T21:56:50.387 に答える