昨天我问this question,我确信单线程文件服务器可以满足我的需求。是的,只有一个线程,文件服务器才能很好地工作(仅适用于小文件),它每秒可以处理约300个请求,现在的问题是服务器的write(我使用FileChannel.transferTo()
)部分将阻止服务大型文件需要相当长的时间,这会使其他连接无法连接。
我注意到FileChannel.transferTo()
有时在传输大文件(约800KB)时传输0字节。失败并显示:java.io.IOException: Try again.
这是在Android上。
因为我将FileChannel.transferTo()
放在了循环中,所以我可以得到FileChannel.transferTo()
运行数千次以最终传输整个文件的情况。
我的问题是什么原因导致FileChannel.transferTo()
无法传输请求的字节?如何解决此问题并使文件服务器更灵敏地处理大文件?
最佳答案
该方法不可能返回零并同时引发异常,但是我建议当您“重试”时,应减少传输计数。我会继续减半直到病情消失。无论如何,您都必须在循环中调用transferTo()
,因此它不会对您的代码产生太大影响。