昨天我问this question,我确信单线程文件服务器可以满足我的需求。是的,只有一个线程,文件服务器才能很好地工作(仅适用于小文件),它每秒可以处理约300个请求,现在的问题是服务器的write(我使用FileChannel.transferTo())部分将阻止服务大型文件需要相当长的时间,这会使其他连接无法连接。

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

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

我的问题是什么原因导致FileChannel.transferTo()无法传输请求的字节?如何解决此问题并使文件服务器更灵敏地处理大文件?

最佳答案

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

08-26 02:14