我正在通过apache.commons.FtpClient阅读文件。
99.9%的时间可以正常工作,但有时它只会在read()方法中死掉......
InputStream inStream = ftp.retrieveFileStream(path + file.getName());
String fileAsString = "";
if(inStream == null){
return;
}
while((c = inStream.read()) != -1){ //this is where the code sometimes just hangs
fileAsString += Character.valueOf((char)c);
}
我的问题是什么是最可靠的方法来防止这种无限期锁定系统。我应该在单独的线程中设置计时器吗?或者有更简单的方法吗?
答案 0 :(得分:4)
如果您的代码挂起,则意味着您的FTP服务器尚未发送整个文件。您可以使用Timer,但我相信FtpClient允许您设置超时。
BTW:你读取文件的方式非常效率低下。如果您的文件大于几K,它将使用越来越多的CPU。
您正在从字节创建一个字符(这本身就是一个坏主意),并为文件中的每个字节创建一个String对象。
我建议使用提供的复制方法或commons-io库附带的复制方法将数据复制到ByteArrayInputStream。
答案 1 :(得分:1)
只是快速查看文档,如果你做了......
while (inStream.available() > 0 && (c = inStream.read()) != -1)
在您真正阅读之前,似乎会仔细检查您是否可以无阻塞地阅读。我不确定这一点。