2011-07-16 12 views
9
InputStream data = realResponse.getEntity().getContent(); 
byte[] preview = new byte[100]; 
data.read(preview, 0, 100); 

// अब मैं बाद में InputStream का उल्लेख करना चाहते हैं, लेकिन मैं इसे धारा की शुरुआत से चाहते हैं। में नहीं 100 बाइट्स मैं 100 पर की कोशिश की mark() इसे करने के लिए रीसेट नहीं होगा, और उसके बाद पहले 100 बाइट्स पढ़ने के बाद reset(), लेकिन यह या तो काम नहीं करता है।InputStream शुरुआत

कोई विचार? शायद एक बेवकूफ गलती .. इसे देखकर समायोजित करें।

उत्तर

19

जब आप ऑब्जेक्ट के mark() का उपयोग करते हैं तो आपको markSupported() विधि से जांच करनी चाहिए यदि आपका इनपुटस्ट्रीम वास्तव में चिह्न का उपयोग करके समर्थन करता है। एपीआई के अनुसार InputStream कक्षा नहीं है, लेकिन java.io.BufferedInputStream कक्षा करता है। हो सकता है कि आपको BufferedInputStream ऑब्जेक्ट के अंदर अपनी स्ट्रीम एम्बेड करनी चाहिए:

InputStream data = new BufferedInputStream(realResponse.getEntity().getContent()); 
// data.markSupported() should return "true" now 
data.mark(some_size); 
// work with "data" now 
... 
data.reset(); 
+0

यह एक आकर्षण की तरह काम किया। मुझे एक BufferedInputStream – Du3

+0

https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#reset "इनपुटस्ट्रीम में रीसेट() विधि की आवश्यकता है IOException()" फेंकने के अलावा कुछ भी नहीं है; -) –

1

InputStream मार्क का समर्थन करता है (आप markSupported() विधि के साथ जांच कर सकते हैं), तो निम्नलिखित काम करना चाहिए:

InputStream data = realResponse.getEntity().getContent(); 
byte[] preview = new byte[100]; 
data.mark(100); 
data.read(preview, 0, 100); 
data.reset(); 

हालांकि, ध्यान रखें कि data.read(preview, 0, 100)नहीं एक ही बार में 100 बाइट्स पढ़ने के लिए गारंटी है , यह कम पढ़ सकता है।

+0

क्या GetContent() इनपुट स्ट्रीम चिह्न() का समर्थन करती है? – extraneon

+0

मैं यह जानने के बिना इसका उत्तर नहीं दे सकता कि 'realResponse' वर्ग क्या है (और लाइब्रेरी का कौन सा संस्करण इसमें है)। – Lucero

+0

@ लुसेरो हाँ आप कर सकते हैं। मार्क समर्थित() आपको बताता है कि। – EJP

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