Java nio ライブラリを使用して、「ゼロ コピー」と呼ばれる O/S レベルでのファイル転送/バッファリングを利用する方法について読んでいました。
ファイルの作成/書き込み方法の違いは何ですか? ゼロコピーを使用することの欠点はありますか?
ゼロ コピーとは、プログラムがデータをカーネル空間からユーザー空間などに転送しないことを意味します。これはより高速です 素晴らしい記事はここにあります: http://www.ibm.com/developerworks/library/j-zerocopy/
ゼロ コピーは、アプリケーションがディスクからソケットにデータを転送する際の「仲介者」ではなくなる手法です。ゼロ コピーを使用するアプリケーションは、アプリケーションを介さずに、カーネルがデータをディスク ファイルからソケットに直接コピーすることを要求します。これにより、パフォーマンスが向上し、コンテキスト スイッチが減少します。
それはすべて、アプリケーションがディスクから読み取ったデータをどのように処理するかに依存します。ファイルを読み取り、ソケットを介して中継することで大量の静的コンテンツを提供する Web アプリケーションの場合、パフォーマンスを向上させるためにゼロ コピーが最適です。ただし、アプリケーションがデータをローカルで使用している場合 (データを何らかの方法でクランチしてから書き戻すか、永続化せずにローカルで表示する場合)、ゼロ コピーは使用しません。
ゼロコピーに関するこのIBM DeveloperWorks の記事は、よく読んでください。
Java でのファイル I/O の他の方法は、読み書きするファイルのタイプに基づいて Stream クラスを使用することです。これにはバッファリングされたストリームとバッファリングされていないストリームの両方が含まれますが、通常はバッファリングされたストリームの方が I/O シーク サイクルが少なくなり、コンテキスト スイッチが少なくなるため、パフォーマンスが向上します。