1

ファイル内のテキストを検索したいとします。grep のようなシステム ユーティリティ/プログラムを使用する必要がある場合と、行を読み取るような Java API を使用する必要がある場合を知りたいのですが、その行のテキストを検索するか、Java Scanner クラスを使用します。

2 つのアプローチのトレードオフを理解したいと思います。つまり、grep を使用すると、JVM と grep プロセスの間に通信のオーバーヘッドが発生するでしょうか? grep 用の新しい OS プロセスの作成はオーバーヘッドになりますか?

grep は通常の Java ファイル検索よりも優れたパフォーマンスを発揮しますか?

助けてください...

4

2 に答える 2

2

はい、オーバーヘッドが発生します。外部プロセスの開始とそれとの通信にはコストがかかります。さらに、多くのシステムには grep コマンドがありません。Java コードを移植可能にしたい場合は、OS 固有のコマンドに依存しないでください。

もう 1 つの問題は、OS コマンドが (たとえば) ファイルを検索できるが、メモリ内のデータ構造を検索できないことです。

于 2012-10-30T19:44:10.077 に答える
0

基本的に、システムの独立性とツールの認識された利益をトレードオフしています。場合によっては、これを回避することはできません。

すべてのシステムに、必要なツールが必要な場所や必要なバージョンにインストールされているわけではありません。

アプリケーションでツールをデプロイできる場合でも、ターゲット プラットフォームごとに実装を提供する必要があります。

確かに、「X で実行されることは決してないだろう」と言うのは簡単ですが、すぐには実現できません ;)

また、外部アプリケーションの IO を実行および管理するための追加のオーバーヘッドもあります。難しいことではありませんが、適切に作成された Java API よりもはるかに複雑です。

前述したように、選択の余地がない場合もあります (Windows と Mac で使用しているメディア検査ツールがいくつかありますが、Java で実装しようとはしていませんが、実装できないからではありませんが、それは複雑で時間がかかり、誰かが (ネイティブ プログラムで) 既に行っているためです)。

外部コマンドの重みの利点と、それを使用する際の問題とのバランスをとって選択する必要があります。また、当面の問題を解決する可能性のある API の開発が既に開始されているかどうかも調査する必要があります。

私見では

于 2012-10-30T22:11:49.577 に答える