तो मेरे पास कुछ कोड है जो फ़ाइल से बाइट्स की एक निश्चित मात्रा को पढ़ता है और परिणामस्वरूप बाइट सरणी देता है (यह मूल रूप से नेटवर्क को भेजने के लिए फाइलों को खंडित करने के लिए उपयोग किया जाता है (अंत में) बेस 64-एन्कोडेड एएससीआई टेक्स्ट)।जावा: बाइट सरणी को "ट्रिम" कैसे करें?
यह ठीक काम करता है, सिवाय इसके कि जब फ़ाइल का अंतिम हिस्सा उत्पन्न होता है, तो यह पूर्णांक नहीं होता है। इसलिए, परिणामस्वरूप बाइट सरणी पूर्ण नहीं है। हालांकि, यह एक स्थिर आकार है, जिसका अर्थ है कि फ़ाइल को फिर से इकट्ठा किया गया है, अंत में अतिरिक्त डेटा (0 शायद हो सकता है) का एक पूरा समूह है।
मैं इसे कैसे बना सकता हूं ताकि फ़ाइल के आखिरी हिस्से के लिए बाइट [] वास्तव में केवल उस डेटा को शामिल कर सके जिसमें इसकी आवश्यकता हो? कोड इस तरह दिखता है:
private byte[] readData(File f, int startByte, int chunkSize) throws Exception {
RandomAccessFile raf = new RandomAccessFile(f, "r");
raf.seek(startByte);
byte[] data = new byte[chunkSize];
raf.read(data);
raf.close();
return data;
}
तो अगर chunkSize फ़ाइल में शेष बाइट्स से बड़ा है, एक पूर्ण आकार बाइट [] लौटे हो जाता है, लेकिन इसके केवल डेटा के साथ आधा भरा।
बजाय System.arraycopy के ऊपर पद से Arrays.copyOf का उपयोग करते हुए की लंबाई के बराबर (जो एक अपवाद फेंक दिया), यह पूरी तरह से काम किया! धन्यवाद! –
ठीक किया गया, मेरे तुलना में एक टाइपो था, '== 'नहीं' = 'का उपयोग किया जाना चाहिए था। – notnoop
@ एरिन ड्रमॉन्ड: 'System.arraycopy()' द्वारा निकाला गया अपवाद क्या था? – Asaph