के लिए की एक ही राशि नहीं पढ़ता अच्छा है या बुरा मैं बिना किसी समस्या के निम्नलिखित की तरह कोड का उपयोग किया गया है:जावा: InputStream से पढ़ें हमेशा डेटा
ZipFile aZipFile = new ZipFile(fileName);
InputStream zipInput = aZipFile.getInputStream(name);
int theSize = zipInput.available();
byte[] content = new byte[theSize];
zipInput.read(content, 0, theSize);
मैं इसे इस्तेमाल किया है प्राप्त करने की इस तर्क (उपलब्ध आकार और सीधे बाइट बफर को पढ़ना) File
I/O के लिए किसी भी मुद्दे के बिना और मैंने इसे ज़िप फ़ाइलों के साथ भी उपयोग किया।
लेकिन हाल ही में मैंने एक मामले में कदम रखा कि zipInput.read(content, 0, theSize);
वास्तव में theSize
उपलब्ध है कि 3 बाइट कम पढ़ता है।
और चूंकि कोड मैं 3 पिछले बाइट्स
लापता और बाद में कार्यक्रम ठीक से काम नहीं कर सकते हैं (फ़ाइल एक बाइनरी फ़ाइल है) के साथ फ़ाइल को पढ़ने लंबाई zipInput.read(content, 0, theSize);
द्वारा वापस जाँच करने के लिए एक पाश में नहीं है।
बड़े आकार की विभिन्न ज़िप फ़ाइलों के साथ पर्याप्त अजीब 1075 बाइट्स (मेरे मामले में समस्याग्रस्त ज़िप प्रविष्टि 867 बाइट्स है) कोड ठीक काम करता है!
मैं समझता हूं कि कोड का तर्क शायद "सर्वश्रेष्ठ" नहीं है, लेकिन मुझे अचानक यह समस्या क्यों मिल रही है?
और अगर मैं तुरंत एक बड़ी ज़िप प्रविष्टि के साथ प्रोग्राम चलाता हूं तो यह कैसे काम करता है?
किसी भी इनपुट अत्यधिक स्वागत
धन्यवाद
मुझे इस बारे में पता है। यही कारण है कि मैंने उल्लेख किया कि मेरा दृष्टिकोण अच्छा नहीं है। फिर भी मैं इस व्यवहार को समझने की कोशिश कर रहा हूं, एक छोटी फ़ाइल में पिछले 3 बाइट्स को याद करने के लिए, लेकिन बड़ी फ़ाइलों में कोई समस्या नहीं है – Cratylus
@ user384706: समझना कि विशिष्ट व्यवहार कोई लक्ष्य नहीं देता है: यह कार्यान्वयन-निर्भर है और कई कारकों के आधार पर आपका कोड किसी भी तरीके से गलत हो सकता है। यह समझना महत्वपूर्ण है कि आपका कोड सामान्य रूप से गलत क्यों हो सकता है और इसे कैसे ठीक किया जा सकता है। –