JNIのポイントは何ですか?
これにより、同じプロセス内でCコードとJavaコードを混在させることができます。
Java UIプログラムからプロセスを実行し、そのstdoutを解析することはできませんか?
JNIを使用して実現できる多くのことは、プロセス間通信(IPC)を使用して実現することもできます。ただし、すべての入力データを他のプロセスに送信してから、すべての結果を返送する必要があります。これはかなり高価になる可能性があるため、JNIを使用できる多くの状況(既存のCライブラリのラップなど)ではIPCは実用的ではありません。
また、JNIを使用するとセキュリティの問題が発生する可能性があることも読みました。これらの問題は、呼び出されたコードの品質に直接依存しますか?それともこれはもっと深いものですか?
ここでのポイントは、JVMは、Javaコードがスローされた場合でも、バッファオーバーラン、スタックスマッシング攻撃などが発生しないようにするために多くの作業を行うということです。たとえば、すべての配列アクセスに対して境界チェックを実行します(Cは実行しません)。
一方、JNIコードはJVMのブラックボックスです。Cコードに問題がある場合(バッファオーバーランなど)、すべての賭けは無効になります。