नीचे दिए गए कोड का टुकड़ा कुछ यूआरएल से एक फाइल डाउनलोड करता है और इसे स्थानीय फाइल में सहेजता है। केक का टुकड़ा। यहां क्या गलत हो सकता है?मेरी डेटा स्ट्रीम के साथ छेड़छाड़ कौन कर रहा है?
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% में काम करता है और जैसा कि उम्मीद की जब भी एक एंटीवायरस या कुछ अन्य सुरक्षा के लिए इस कोड चलाने वाले कंप्यूटर पर स्थापित सॉफ्टवेयर है काम नहीं करता है। मैं अंधेरे से इस तरह से एक उंगली को इंगित कर रहा हूं क्योंकि जब भी मैं इसे रोकता हूं (या अक्षम), कोड फिर से सही काम करता है। इस तरह के हस्तक्षेप का अंतिम परिणाम यह है कि डाउनलोड की गई फ़ाइल का एमडी 5 उम्मीद से मेल नहीं खाता है, और एक पूरी नई गाथा शुरू होती है।
तो, सवाल यह है - क्या यह वास्तव में संभव है कि कुछ स्मार्ट "सुरक्षा" सॉफ़्टवेयर यूआरएल से आने वाली वास्तविक स्ट्रीम को इसके बारे में जानने के बिना बदल देगा? और यदि हां - आप इससे कैसे निपटते हैं? (Kasperksy और Norton उत्पादों के साथ सत्यापित)।
संपादित-1: जाहिर है मैं इस समस्या पर एक पकड़ लिया है और यह antiviruses के साथ कुछ नहीं मिला है। यह डाउनलोड एफ़टीपी सर्वर (विशेष रूप से फाइलज़िला) से होता है और हम क्लाइंट साइड पर अपाचे कॉमन्स एफटीपी का उपयोग करते हैं। मैंने जो किया वह एफ़टीपी सर्वर पर गया और डाउनलोड के बीच में कनेक्शन को समाप्त कर दिया गया। मुझे उम्मीद है कि है .read (..) क्लाइंट पक्ष पर IOException फेंक देगा, लेकिन यह कभी नहीं हुआ। इसके बजाए, is.read (..) रिटर्न -1 का अर्थ है कि स्ट्रीम से कोई और डेटा नहीं आ रहा है। यह निश्चित रूप से अप्रत्याशित है और बताता है कि कभी-कभी मुझे आंशिक फाइल क्यों मिलती हैं। यह व्याख्या नहीं करता है हालांकि कभी-कभी डेटा भी बदल जाता है।
'बारफ' परिभाषित करें। – EJP
आप निष्पादन कैसे संभालते हैं? यदि 'dis.close()' अपवाद फेंकता है तो आउटपुट स्ट्रीम उदाहरण के लिए ठीक से बंद नहीं होगा। – dacwe
@dacwe - जो भी इस विधि से फेंक दिया गया है वह विफलता है, सब कुछ निरस्त हो जाता है। रहस्य यह है कि कुछ भी नहीं फेंक दिया जाता है, सब कुछ ठीक हो जाता है। समस्या यह है कि यह मेरे द्वारा अपेक्षित डेटा नहीं है, ज्यादातर बार इसे आधे में काटा जाता है, कभी-कभी बदल दिया जाता है .. – Dima