下面的代碼片段從某個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和諾頓產品進行驗證)。
編輯-1: 顯然,我已經有了對這個問題保持和它什麼都沒有做與防病毒軟件。下載從FTP服務器(特別是FileZilla)進行,我們在客戶端使用apache commons ftp。我所做的就是去FTP服務器並在下載過程中終止連接(踢出它)。我預計is.read(..)會在客戶端拋出一個IOException,但是這從來沒有發生過。相反,is.read(..)返回-1意味着沒有更多來自流的數據。這絕對是意想不到的,並解釋了爲什但這並不能解釋爲什麼有時數據也會被改變。
定義'barfs'。 – EJP 2012-08-16 10:29:31
你如何處理免除?如果'dis.close()'拋出異常,輸出流將無法正確關閉。 – dacwe 2012-08-16 10:32:48
@dacwe - 不管從這個方法拋出的是失敗,一切都會中止。神祕的是沒有任何東西被拋出,所有東西都被下載得很好。問題是,它不是我所期望的數據,大部分時間它被削減了一半,有時候被改變了。 – Dima 2012-08-16 10:37:29