JNIからSTLライブラリを呼び出す方法はありますか?JNIはネイティブコールにCのようなインターフェイスを提供すると思いますが、C ++テンプレートライブラリでこれをどのように実現しますか?
4 に答える
単純な STL だけを探している場合は、おそらく代わりに Java ライブラリを使用できることに同意します。ただし、STL をラップすることを主張する場合、SWIG は JNI ですぐに STL ラップを提供します (基本的なメカニズムについては、こちらを参照してください)。これにより、比較的安定したテスト済みのコードが生成されます。
私は自分でやったことがありませんが、これが可能であることは知っています。ただし、非常に注意しないと、JNI コードによって JVM がクラッシュする可能性があります。また、JNI コードは Java コードよりも保守がはるかに困難です。私は、Java -> JNI -> STL および COM コードが破棄され、同じ STL および COM とソケットにアクセスする C# に置き換えた 1 つのプロジェクトに参加していました。私たちは振り返りませんでした。
少量の JNIしか実行していない場合は、それだけの価値があるかもしれません。JNI 経由で大規模なインターフェイスを作成する場合は、STL とやり取りするコンポーネントを Java ではなく C# で記述し、ソケットを使用して C# と Java コンポーネント間の通信を行うことを強くお勧めします。作成、テスト、および保守がはるかに簡単になります。
Java から STL ライブラリを使用する必要がある理由をお聞きしたいと思います。それらの中に、Java 独自の膨大なライブラリ セットによって提供されていないものはありますか?
独自のコードを呼び出さなければならない理由は理解しています (Java コードをプロファイリングして、それが必要であることがわかったと思います。そうでなければ、あなたの努力は無駄になります) が、STL のものを直接呼び出す方法を尋ねているようです。
私たちはしばしば JNI に問題を抱えており、それによってコードの移植性が低下します。そのため、私たちのショップで JNI を使用したいという非常に正当な理由が必要であり、確かなデータで証明する必要があります。十分ではありません。