TCPソケットからディスク上のファイルにバイトを直接ストリーミングしたい。SocketChannel
Javaでは、特にとでNIOチャネルを使用できますFileChannel
。引用FileChannel#transferFrom(...)
:
この方法は、ソースチャネルから読み取り、このチャネルに書き込む単純なループよりもはるかに効率的である可能性があります。多くのオペレーティングシステムは、実際にバイトをコピーすることなく、ソースチャネルからファイルシステムキャッシュにバイトを直接転送できます。
もちろん、標準の「コピーループ」を記述してバイトを読み書きしたり、非同期I/Oを利用して待機を最小限に抑えたりすることもできます。これは、Javaが利用しているプラットフォームのネイティブ機能に匹敵しますか、それとも別のアプローチがありますか?