1

FileChannelのコメントを読みましたtransferFrom

 * <p> This method is potentially much more efficient than a simple loop
 * that reads from the source channel and writes to this channel.  Many
 * operating systems can transfer bytes directly from the source channel
 * into the filesystem cache without actually copying them.  </p>

とはどういう意味ですか?

Many operating systems can transfer bytes directly from the source channel
into the filesystem cache without actually copying them.

チャネルから読み取ってから別のチャネルに書き込むと、バイトがキャッシュに転送されませんか?

4

1 に答える 1

0

はい、ループを使用してソース チャネルから ByteBuffer に読み取り、次に ByteBuffer を FileChannel に書き込むと、バイト/データは書き込みの最後にファイル システム キャッシュに格納されます。それらは Java ByteBuffer にもコピーされ、カーネルからアプリケーション メモリ (または「C ヒープ」) にコピーされ、次に JVM ヒープ (最悪の場合) にコピーされた可能性があります。

ソース チャネルに互換性がある場合、OSはJVM ヒープへのコピーを回避し、場合によってはカーネルから完全に外に出すこともできます。代わりに、たとえばソース ファイル ページから宛先ファイル ページに直接コピーできます

パフォーマンスの実際の改善が見られる場合は、JVM のバージョン、OS、およびファイル システムに大きく依存します。Java でコード化されたループよりもパフォーマンスが悪いとは思いません。

ロブ。

于 2013-06-26T02:43:16.330 に答える