8

TCPソケットからディスク上のファイルにバイトを直接ストリーミングしたい。SocketChannelJavaでは、特にとでNIOチャネルを使用できますFileChannel。引用FileChannel#transferFrom(...)

この方法は、ソースチャネルから読み取り、このチャネルに書き込む単純なループよりもはるかに効率的である可能性があります。多くのオペレーティングシステムは、実際にバイトをコピーすることなく、ソースチャネルからファイルシステムキャッシュにバイトを直接転送できます。

もちろん、標準の「コピーループ」を記述してバイトを読み書きしたり、非同期I/Oを利用して待機を最小限に抑えたりすることもできます。これは、Javaが利用しているプラ​​ットフォームのネイティブ機能に匹敵しますか、それとも別のアプローチがありますか?

4

1 に答える 1

3

でデータを読み取り、拡張メソッドをNetworkStream使用しCopyToてデータを FileStream に書き込むことができます。

.NET4 以前の手動アプローチ: C# でストリームをファイルに保存するにはどうすればよいですか?

送信にはSocket.SendFile、Win32TransmitFile方式を利用してファイルを直接送信する方法があります。残念ながら、対応するSocket.ReceiveFileメソッドやReceiveFileWin32 API はありません。

于 2012-07-13T13:37:11.760 に答える