谁在篡改我的数据流?

Dim*_*ima 5 java sockets ftp

下面的代码片段从某个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;
}
Run Code Online (Sandbox Code Playgroud)

我在这里发布问题的原因是因为它在99.999%的时间内工作,并且只要在运行此代码的计算机上安装了防病毒软件或其他一些保护软件,它就无法正常工作.我盲目地指着一个手指,因为每当我停止(或禁用)它时,代码再次完美.这种干扰的最终结果是下载文件的MD5与预期的不匹配,并开始全新的传奇.

所以,问题是 - 一些智能"保护"软件真的有可能在不知情的情况下改变来自URL的实际流吗?如果是的话 - 你怎么处理这个?(通过Kasperksy和Norton产品验证).


编辑-1: 显然我已经解决了这个问题,它与防病毒无关.下载发生在FTP服务器(特别是FileZilla),我们在客户端使用apache commons ftp.我做的是去了FTP服务器并在下载过程中终止了连接(踢出去).我希望is.read(..)会在客户端抛出IOException,但这从未发生过.相反,is.read(..)返回-1意味着没有更多数据来自流.这绝对是意料之外的,并解释了为什么有时我得到部分文件 然而,这并不能解释为什么有时数据也会被改变.

art*_*tol 1

是的,这种情况经常发生在我身上。就我而言,这是由我公司网络上的 Websense 透明 HTTP 代理引起的。最严重的问题是由返回 200 OK 的块页面引起的。

您每次都会遇到相同或相似的腐败吗?例如,您是否获得一些 HTML 来解释请求被阻止的原因?您可以做的最好的事情就是将下载数据的前几个字节与块页面中的某些文本进行比较,并在这种情况下抛出异常。

编辑:根据您的更新,您是否将 FTP 客户端设置为图像/二进制模式?