1

我昨天问了这个问题,我确信单线程文件服务器会满足我的需要。是的,使用单线程,文件服务器工作得很好(仅适用于小文件),它每秒可以处理大约 300 个请求,现在问题是服务器的写入(我使用FileChannel.transferTo())部分会阻塞很长一段时间用于服务大文件,这会阻止其他连接被连接。

我注意到传输大文件(大约 800KB)时FileChannel.transferTo()有时会传输0 个字节。它失败了:java.io.IOException: Try again. 这是在Android上。

因为我放FileChannel.transferTo()了一个循环,所以我可以得到FileChannel.transferTo()运行数千次最终传输整个文件的情况。

我的问题是什么原因导致FileChannel.transferTo()无法传输请求的字节?我该如何解决这个问题并让我的文件服务器对处理大文件的响应速度更快?

4

1 回答 1

0

该方法不可能同时返回零并抛出异常,但我建议当你得到“重试”时,你应该减少传输计数。我会继续减半,直到病情消失。无论如何,您都必须transferTo()在循环中调用,因此它并不会真正影响您的代码太多。

于 2012-07-05T13:22:39.987 回答