パフォーマンス上のより良い選択肢は何ですか:fileinputstreamとfileoutputstreamを使用してファイルをコピーするか、JavaからOS固有のコマンドコピーコマンドを実行しますか?Javaでのファイルコピー
答えて
OS固有のコピーコマンドを使用すると、高速でも、少なくとも簡単な自己記述型ソリューションと同じくらい速くても大丈夫です。 OS特有のコマンドはおそらく、目立つバッファサイズや他の最適化を使用します。それ以外の場合は、自分自身を把握する必要があります。
編集:
x-xが正しいので、copyコマンドを直接呼び出すべきではありません。 Javaには既にFile.copy()などのコピーメソッドがあると思っていましたが、JDICでさえも何も見つかりませんでした。だからApache Commons IOはおそらく行く方法です。
これはまさにそれを行うmethodという優れたコモンズライブラリを使用しています。非常に広く使用されており、非常に最適化されていることが保証されています。
hereからダウンロードするか、mavenを使用している場合はPOM dependencyをpom.xmlファイルにコピーしてください。
OS固有のコピーではコピーしないでください。ポータブルではありません。 Javaの非Javaコードを使用すると、JNIを使用するか外部コマンドを生成するかは、頭痛とメンテナンスの悪夢です。
Javaで実行します。
OSコマンドを実行する際の1つの問題は、OSカーネルレベルで完全なプロセスを作成する必要があることです。これは重量のある操作です。小さなファイルには特に重大な固定オーバーヘッドがあります。
もう1つの問題は、正当な理由なしにシステム依存性を追加することです。
エラーが発生した場合の対処方法によって異なります。多くの場合、ネイティブコマンドはエラー状況を処理する能力が優れていますが、ユーザーと対話するのは難しい場合があります。
純粋なJavaソリューション(クロスプラットフォーム以外にも)によって、完全に制御することができます。ライブラリを使用して、面倒な詳細やエラー状況を処理することをお勧めします。
- 1. 不完全なファイルコピーJava NIO
- 2. C#の実行ファイルコピー?
- 3. C#:ファイルコピー通知
- 4. K&R本1.5.1ファイルコピー
- 5. サブディレクトリへの再帰的ファイルコピー
- 6. wxpythonのファイルコピーの進行状況バー
- 7. HOW:Apache Camel、ルートタイミングの問題。クォーツ+ファイルコピー
- 8. httpを使用するWindowsファイルコピー
- 9. getRuntime()を使用したファイルコピー。exec()
- 10. GThreadとファイルコピーに関する問題
- 11. クロスデータセンター:MySQLレプリケーションと単純なファイルコピー
- 12. Rubyのファイルコピーで別のファイルが生成される
- 13. Windowsのデフォルトよりも優れたファイルコピーは何ですか?
- 14. ファイルコピー操作が別のスレッドで機能しませんか?
- 15. 並行ファイルコピー操作のためのPythonマルチプロセス/マルチスレッドの使用
- 16. ソースファイル名などのファイルコピー/ムーブイベントの詳細をキャッチする方法
- 17. C#のファイルコピー機能を探しています
- 18. Node.jsの進行状況情報を含む高速ファイルコピー?
- 19. ファイルコピーの残り時間を正しく計算する問題
- 20. アプリが実行されているときにAndroidデバイスでのファイルコピーを防止する
- 21. ファイルコピー操作をキャンセルできるように、どのようにCopyFileExをレポートするようにしますか?
- 22. のJava、JavaでははBouncyCastle
- 23. Javaは:1つの宣言でJavaで
- 24. JavaシリアルJavaでは
- 25. Javaプログラム(Javaの1.5)でBufferedWriterの
- 26. Java - Javaでのjava.library.pathの問題
- 27. Java 8 | HashMapのパラレルストリームのJava 8で
- 28. 私のJavaプロジェクトでは、私のJavaプロジェクト
- 29. Javaでのキャッシング
- 30. Javaでのゲームプログラミング
ここでは、移植性が第一の関心事ではないと仮定して、このような方法の主な使用例は、要求処理の一部として多くのファイルをコピーすることになり、したがってパフォーマンスは非常にimp基準です。 – jjoshi
パフォーマンスが重要な基準であっても、ボトルネックはCPUではなくディスクになりますので、どの言語で行うかは問題になりません。 – flybywire
ファイルコピーを行うライブラリ!!!それはコードの約5行のために少し船外に行くのではないですか?それとも、最大のスループットのために、いくつかの難解なJava同時読み込み/書き込み呼び出しを使用していますか? –