监控InputStream的最佳方法是什么?

时间:2009-02-27 22:37:08

标签: java io inputstream

我正在通过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);

}

我的问题是什么是最可靠的方法来防止这种无限期锁定系统。我应该在单独的线程中设置计时器吗?或者有更简单的方法吗?

2 个答案:

答案 0 :(得分:4)

如果您的代码挂起,则意味着您的FTP服务器尚未发送整个文件。您可以使用Timer,但我相信FtpClient允许您设置超时。

BTW:你读取文件的方式非常效率低下。如果您的文件大于几K,它将使用越来越多的CPU。

您正在从字节创建一个字符(这本身就是一个坏主意),并为文件中的每个字节创建一个String对象。

我建议使用提供的复制方法或commons-io库附带的复制方法将数据复制到ByteArrayInputStream。

答案 1 :(得分:1)

只是快速查看文档,如果你做了......

while (inStream.available() > 0 && (c = inStream.read()) != -1)

在您真正阅读之前,似乎会仔细检查您是否可以无阻塞地阅读。我不确定这一点。