“ベストプラクティス” Javaを介してOSの別のプロセスにアクセスするには?
-
03-07-2019 - |
質問
Skype4Java(SkypeのJava API)を読んでいて、jniを使用してskypeクライアントにアクセスしていることに気付きました。
直感的に、他のプロセスにアクセスするためのOS依存のjni実装を備えたjavaの標準ライブラリがすでに存在すると仮定します。探すように設定しましたが、見つかりませんでした。
そのようなライブラリはありますか?そうでない場合、OS内の別のプロセスにアクセスするベストプラクティスはありますか?必ずしもスカイプクライアントではありませんか?
解決
「アクセス」の意味を定義する必要があると思います。単純な古いプロセス間通信について話している場合、ソケットまたはJNIが本当に最善の策です。
メモリマップドファイルの使用に関するGarthのコメントは興味深いです-Cアプリケーション間のIPCにMMFと仮想ファイルを何度も使用しましたが、JavaのMMF実装がネイティブOS仮想ファイルシステムと互換性があることは私には決してありませんでした。これらの種類の仮想ファイルは通常、簡単なセットアップを必要とするので、それが機能するかどうかは驚きです...
すべては、アプリ間で大量のデータを送り出すのでない限り、おそらくソケットを使用することが最も一般的で効果的な方法です。ホストOSとJava VM間のエンディアンを考慮してください:-)
他のヒント
Java 1.4以降では、メモリマップファイルを使用して、別のプロセスと任意の情報を交換できます。詳細については、java.nio.MappedByteBufferを参照してください。
これは探しているものではありませんが、それでもおそらく大いに役立つでしょう: Java java.netのNative Access プロジェクト。
ソケットを忘れないでください...