下面的代码从某个 URL 下载文件并将其保存到本地文件。小菜一碟。这里可能有什么问题?
protected long download(ProgressMonitor montitor) throws Exception{
long size = 0;
DataInputStream dis = new DataInputStream(is);
int read = 0;
byte[] chunk = new byte[chunkSize];
while( (read = dis.read(chunk)) != -1){
os.write(chunk, 0, read);
size += read;
if(montitor != null)
montitor.worked(read);
}
chunk = null;
dis.close();
os.flush();
os.close();
return size;
}
我在这里发布问题的原因是因为它在 99.999% 的时间内都可以正常工作,并且只要运行此代码的计算机上安装了防病毒软件或其他一些保护软件,它就无法按预期工作。我这样盲目地指指点点,因为每当我停止(或禁用)它时,代码都会再次完美运行。这种干扰的最终结果是下载文件的MD5与预期不符,一个全新的传奇开始了。
所以,问题是 - 是否真的有可能一些智能“保护”软件会在我不知道的情况下改变来自 URL 的实际流?如果是的话 - 你如何处理这个?(经卡巴斯基和诺顿产品验证)。
EDIT-1: 显然我已经控制了这个问题,它与防病毒软件无关。下载从 FTP 服务器(特别是 FileZilla)进行,我们在客户端使用 apache commons ftp。我所做的是转到 FTP 服务器并在下载过程中终止连接(将其踢出)。我预计 is.read(..) 会在客户端抛出一个 IOException ,但这从未发生过。相反, is.read(..) 返回 -1 意味着没有更多数据来自流。这绝对是出乎意料的,并解释了为什么有时我会得到部分文件。然而,这并不能解释为什么有时数据也会被更改。