2017-03-31 10 views
7

को निरस्त करना मुझे हाल ही में aws-java-sdk 1.11.108 में अपग्रेड करना पड़ा था। मेरे पास एक जावा प्रोग्राम है जो एस 3 ऑब्जेक्ट्स (8 से 10 जीबी आकार में) ईसी 2 बॉक्स में डाउनलोड करता है और इसे स्ट्रीम के रूप में संसाधित करता है। यह प्रोग्राम किसी भी समस्या से 2 साल से अधिक समय तक काम कर रहा है, लेकिन aws-java-sdk के नवीनतम संस्करण को अपडेट करने के बाद लॉग में निम्नलिखित WARN संदेश के साथ मेरी फ़ाइल-डाउनलोड एबॉर्ट्स मिडवे (कोई अपवाद नहीं)सभी बाइट्स S3ObjectInputStream से नहीं पढ़े गए थे, HTTP कनेक्शन

WARN:com.amazonaws.services.s3.internal.S3AbortableInputStream - Not all bytes were read from the S3ObjectInputStream, aborting HTTP connection. This is likely an error and may result in sub-optimal behavior. Request only the bytes you need via a ranged GET or drain the input stream after use.

S3Object s3Obj = s3client.getObject(new GetObjectRequest(bucketName, s3FileName)); 
Reader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(s3Obj.getObjectContent()); 

यदि किसी को बता सकते हैं क्यों धारा w/ओ किसी भी अपवाद फेंक चुपचाप निरस्त किया जा रहा है, और क्या सबसे अच्छा तरीका यह काम करने के लिए है मैं सराहना करेंगे। तो आप पूरी बात के माध्यम से स्कैनिंग बिना संग्रह की सामग्री को सूचीबद्ध कर सकते हैं

धन्यवाद

+0

मेरे पास एक ही समस्या है जब फ़ाइल को सीधे S3 में अनजिप कर दिया जाता है। – florins

+0

क्या आपके पास अभी भी क्लब में एक और जगह है? मुझे एस 3 के साथ एक ही समस्या है। – dcg

+0

मेरे पास एक ही समस्या है। मेरे पास अब तक कोई समाधान नहीं है। –

उत्तर

0

ज़िप अभिलेखागार, एक (अनावश्यक) केंद्रीय निर्देशिका अंत में संरचना है। जावा का ZipInputStream अंतर्निहित धारा से वास्तव में कभी उपभोग नहीं करता है; getNextEntry() जल्द ही के रूप में शून्य लौटाता है क्योंकि यह केंद्रीय निर्देशिका की शुरुआत पाता है। आप जबकि (in.read()> = 0) जोड़ने का प्रयास कर सकते हैं; अंतर्निहित धारा के अंत तक पढ़ने के लिए आपके ओवरराइड बंद विधि में?

https://github.com/aws/aws-sdk-java/issues/1111

0

close() इनपुट धारा केवल एक बार करना सुनिश्चित करें।

संबंधित मुद्दे