gpt4 book ai didi

java - 谁在篡改我的数据流?

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:50 25 4
gpt4 key购买 nike

下面的代码片段从某个 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 的实际流吗?如果是 - 你如何处理这个问题? (已通过 Kasperksy 和 Norton 产品验证)。


编辑-1:显然我已经解决了这个问题,它与防病毒软件无关。下载是从 FTP 服务器(特别是 FileZilla)进行的,我们在客户端使用 apache commons ftp。我所做的是前往 FTP 服务器并在下载过程中终止连接(将其踢出)。我预计 is.read(..) 会在客户端抛出 IOException,但这从未发生过。相反,is.read(..) 返回 -1,表示流中不再有数据。这绝对是出乎意料的,并解释了为什么有时我会得到部分文件。然而,这并不能解释为什么有时数据也会被更改。

最佳答案

是的,我经常遇到这种情况。在我的例子中,它是由我公司网络上的 Websense 透明 HTTP 代理引起的。最严重的问题是由返回 200 OK 的 block 页面引起的。

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

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

关于java - 谁在篡改我的数据流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com