1

私は昨日この質問をしましたが、シングルスレッドのファイル サーバーが私のニーズに合うと確信していました。はい、単一のスレッドで、ファイルサーバーはかなりうまく機能します(小さなファイルのみ)。毎秒約300のリクエストを処理できます。問題は、サーバーの書き込み(私が使用するFileChannel.transferTo())部分がかなり長い間ブロックされることです大きなファイルを提供するため、他の接続が接続されないようにします。

大きなファイル(約800KB)を転送すると、FileChannel.transferTo()時々0バイトが転送されることに気付きました。失敗します: java.io.IOException: Try again. This was on Android.

ループを入れたので、最終的にファイル全体を転送するために何千回も実行FileChannel.transferTo()する状況が発生する可能性があります。FileChannel.transferTo()

私の質問はFileChannel.transferTo()、要求されたバイトの転送に失敗する原因は何ですか? この問題に取り組み、大きなファイルを処理するためのファイル サーバーの応答性を高めるにはどうすればよいですか?

4

1 に答える 1

0

メソッドがゼロを返し、同時に例外をスローすることはおそらくありませんが、「再試行」を取得したら、転送回数を減らすことをお勧めします。症状が治まるまで半減し続けます。とにかくループで呼び出す必要がtransferTo()あるため、実際にはコードにあまり影響しません。

于 2012-07-05T13:22:39.987 に答える