java - out of memory error for files greater than 3Mb though upload using chunk -
डबल बाइट्स = file.length (); डबल किलोबाइट्स = (बाइट्स / 1024); डबल मेगाबाइट्स = (किलोबाइट / 1024); अगर (मेगाबाइट्स & lt; 10) {filesize = डबल। टूस्ट्रिंग (किलोबाइट्स); System.out.println ("किलोबाइट्स स्ट्रिंग:" + फाईलिज़); Try {arrByteFile = null; इंट बाइट्स रीड; इंट बफर साइज़ = 1024; FileInputStream = नया FileInputStream (फ़ाइल); बाइटअरेऑन आउटपुटस्ट्रीम बॉस = नए बाइटअरेऑनूटस्ट्रीम (); बाइट [] बी = नया बाइट [बफर साइज़]; जबकि ((बाइट्स रीड = है। रीड (बी))! = -1) {बोस। लिखित (बी, 0, बाइट्स रीड); } ArrByteFile = bos.toByteArray (); करीब है(); System.out.println ("फ़ाइल बाइट सरणी आकार: -" + arrByteFile.length); } पकड़ (अपवाद ई) {e.printStackTrace (); } प्रयास करें {चंकऑफ़बैटेएरा चंक ओफ़बाइटअरे = नया चंकऑफ़बाइटअरे (एरबिटफ़ाइल); सरणीलिस्ट = चंकऑफ़बाइटअरेरे.गेट चनक्सओफ़बाइटअरे (); } पकड़ (अपवाद ई) {// TODO स्वत: उत्पन्न होल्डिंग ब्लॉक e.printStackTrace (); } कैसे स्मृति त्रुटि से बाहर संभाल करने के लिए ??
वहाँ भी बेस64 प्रारूप में बड़ी फ़ाइल अपलोड करने के लिए है .. ??
मैं एपीआई कॉल्स के लिए एक्लियर जार का उपयोग कर रहा हूं और फ़ाइल अपलोड करने के लिए चुने का उपयोग कर रहा हूं। लेकिन यह केवल विखंडों का निर्माण करते समय त्रुटि देता है
आपके समय के लिए धन्यवाद ..
समस्या यह है कि आप डेटा जैसा आपने पढ़ा है आप बड़े बफ़र बना रहे हैं जो आपको बिल्कुल भी मदद नहीं करता है क्योंकि एक फाइल को एक बार में पढ़ा जा सकता है, अगर आपको इसकी ज़रूरत होती है, लेकिन आप नहीं करते हैं।
बस डेटा को पढ़ते ही भेजते हैं और आप बड़ी फ़ाइलों के लिए अधिक स्मृति का उपयोग नहीं करेंगे अर्थात। bos को लिखने के बजाय सीधे सॉकेट आउटपुट स्ट्रीम पर लिखें। BTW आप Base64 का उपयोग कर सकते हैं, लेकिन यह बड़ा है और अधिक मेमोरी का उपयोग करेगा (जब तक कि आपने डेटा को आपके जैसा नहीं भेजा इसे पढ़िए जैसा मैंने सुझाया है)
Comments
Post a Comment