8

私は数年間Java開発者であり、JNIを使​​用して非常に便利で強力なことができると聞いています。使用する必要がなかったのか、それとも自分にそれほど関係がないのかはわかりません。しかし、私はそれに触れる必要はまったくありませんでした。

Javaのこの側面の有用性は何でしょうか。例は素晴らしいでしょう。

4

5 に答える 5

13

とても便利です。JNI を使用する主な理由は 2 つあります (他にもある可能性があります)。

  1. パフォーマンス。なんらかの理由で Java ランタイムがパフォーマンスを低下させることができないコードがある場合。その関数をネイティブ コードで実装し、Java から呼び出すことができます。これにより、本当に必要な場合に実装を手動で調整できます。これはおそらく最も一般的ではない理由ですが、Java は通常問題なく動作します。

  2. OS 固有の API へのアクセス。これは大物です。Java で何かをする必要があるだけでなく、Java では単に提供できない何かへのアクセスも必要な場合がありました。私の場合、それは UNIX ドメイン ソケットでした。(名前からわかるように) これらは UNIX 固有であるため、標準的な Java の使用方法はありません。そこで、C でそれらのラッパーのように機能するクラスを作成し、JNI でアクセスしました。ビオラ、問題解決。

于 2008-12-31T06:51:45.350 に答える
4

私は、iSeries が DB2、ユーザー・キュー、データ・キュー、およびその他の OS/400 固有のものにアクセスするための広範な JNI レイヤーを作成しました。iSeries 上のシステムの多くは、JNI なしでは不可能でした。そうです、JNI にはその場所があり、必要なときに本当に必要になります。

これは (純粋な Java の次に) 比較的難しいですが、強力で恐ろしいものではありません。

また、JNI コードを見ているときはいつでも、JNAの使用も検討しています。

于 2008-12-31T08:45:26.307 に答える
2

頭のてっぺんからいくつかの用途を考えることができます。

  1. 対応する Java がない既存の低レベル (C/C++) API との統合
  2. 利用可能な Java API を介して公開されていないシステムの側面との統合 (ハードウェアへの直接アクセスなど)

コードの高度に最適化されたセクションを作成するのに役立つと言う人もいるかもしれませんが、最新の JVM ではかなり高速になり、JNI を使用することの複雑さはおそらくパフォーマンス上の利点を上回るでしょう。

于 2008-12-31T06:52:25.410 に答える
1

ビデオ/オーディオ形式 (ほぼすべて) の C デコードのために FFMPeg にバインドするためのいくつかの用途があります。

ライブラリ自体を使用しているように見える JNA もあります。これは、Java 開発者にすべてを渡して管理するという観点からは「より簡単」ですが、構造マッピングを理解し、すべてのポインターなどを渡すために多くの面倒な作業を行う必要があるという意味ではより困難です。正しく。

于 2008-12-31T08:46:20.407 に答える
1

Suse Linux で実行されているレガシー C アプリケーションに新しい UI をラップする必要がありました。JNI はジョブにとって完璧なツールでした。

一般に、JNI は、Write Once, Run Anywhere という Java の概念と矛盾していると思います。ただし、JNI が役立つユース ケースもあります。

于 2008-12-31T08:52:19.427 に答える