2009-09-01 13 views
3

パフォーマンス上のより良い選択肢は何ですか:fileinputstreamとfileoutputstreamを使用してファイルをコピーするか、JavaからOS固有のコマンドコピーコマンドを実行しますか?Javaでのファイルコピー

答えて

2

OS固有のコピーコマンドを使用すると、高速でも、少なくとも簡単な自己記述型ソリューションと同じくらい速くても大丈夫です。 OS特有のコマンドはおそらく、目立つバッファサイズや他の最適化を使用します。それ以外の場合は、自分自身を把握する必要があります。

編集:
x-xが正しいので、copyコマンドを直接呼び出すべきではありません。 Javaには既にFile.copy()などのコピーメソッドがあると思っていましたが、JDICでさえも何も見つかりませんでした。だからApache Commons IOはおそらく行く方法です。

2

これはまさにそれを行うmethodという優れたコモンズライブラリを使用しています。非常に広く使用されており、非常に最適化されていることが保証されています。

hereからダウンロードするか、mavenを使用している場合はPOM dependencyをpom.xmlファイルにコピーしてください。

OS固有のコピーではコピーしないでください。ポータブルではありません。 Javaの非Javaコードを使用すると、JNIを使​​用するか外部コマンドを生成するかは、頭痛とメンテナンスの悪夢です。

+0

ここでは、移植性が第一の関心事ではないと仮定して、このような方法の主な使用例は、要求処理の一部として多くのファイルをコピーすることになり、したがってパフォーマンスは非常にimp基準です。 – jjoshi

+0

パフォーマンスが重要な基準であっても、ボトルネックはCPUではなくディスクになりますので、どの言語で行うかは問題になりません。 – flybywire

+0

ファイルコピーを行うライブラリ!!!それはコードの約5行のために少し船外に行くのではないですか?それとも、最大のスループットのために、いくつかの難解なJava同時読み込み/書き込み呼び出しを使用していますか? –

2

Javaで実行します。

OSコマンドを実行する際の1つの問題は、OSカーネルレベルで完全なプロセスを作成する必要があることです。これは重量のある操作です。小さなファイルには特に重大な固定オーバーヘッドがあります。

もう1つの問題は、正当な理由なしにシステム依存性を追加することです。

1

エラーが発生した場合の対処方法によって異なります。多くの場合、ネイティブコマンドはエラー状況を処理する能力が優れていますが、ユーザーと対話するのは難しい場合があります。

純粋なJavaソリューション(クロスプラットフォーム以外にも)によって、完全に制御することができます。ライブラリを使用して、面倒な詳細やエラー状況を処理することをお勧めします。

関連する問題