इनपुटस्ट्रीम सार है और आंतरिक डेटा ऑब्जेक्ट्स का खुलासा नहीं करता है (न ही इसके बच्चों को)। तो इनपुटस्ट्रीम की "गहरी प्रतिलिपि" का एकमात्र तरीका बाइटएरे ऑटपुटस्ट्रीम बनाना और इनपुटस्ट्रीम पर पढ़ने() करने के बाद, इस डेटा को ByteArrayOutputStream पर लिखें()। तो फिर कार्य करें:
newStream = new ByteArrayInputStream(byteArrayOutputStream.toArray());
आप अपने InputStream पर mark()
उपयोग कर रहे हैं तो वास्तव में आप इस पलट नहीं सकते। यह आपकी धारा "उपभोग" बनाता है।
अपने इनपुटस्ट्रीम को "पुन: उपयोग" करने के लिए चिह्न() का उपयोग करने से बचें और फिर कॉल रीसेट() पढ़ने के अंत में। फिर आप धारा की शुरुआत से पढ़ रहे होंगे।
संपादित:
Btw, IOUtils InputStream कॉपी करने के लिए इस सरल कोड स्निपेट का उपयोग करता है:
public static int copy(InputStream input, OutputStream output) throws IOException{
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int count = 0;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
और अधिक पढ़ें: http://kickjava.com/src/org/apache/commons/io/CopyUtils.java.htm#ixzz13ymaCX9m
स्रोत
2010-10-31 22:42:05
क्यों आप ऐसा करना चाहते हैं? अफैक आप एक स्ट्रीम से दो बार नहीं पढ़ सकते हैं। – thejh
कुछ अजीब कारणों से मुझे लगता है कि एक बार मैंने इसका इस्तेमाल किया था। तो सुर बनाने के लिए यह मामला नहीं है, मैं एक गहरी प्रतिलिपि बनाना चाहता हूं। मैं एंड्रॉइड के साथ काम कर रहा हूं और आरईएसटी आर्किटेक्चर का उपयोग कर एक webservice से छवियां प्राप्त कर रहा हूं। – Spredzy
आप हमें प्रासंगिक कोड क्यों नहीं दिखाते हैं और आपके पास वास्तविक समस्या की व्याख्या क्यों करते हैं? –