2010-08-13 15 views
8
से

संभावित डुप्लिकेट:
How do I convert an InputStream to a String in Java?
In Java how do a read an input stream in to a string?जावा स्ट्रिंग InputStream

मैं एक InputSteam है और बस पूरी सामग्री के साथ एक एकल सरल String प्राप्त करने की आवश्यकता।

यह जावा में कैसे किया जाता है?

+2

आप विस्तार से बता सकते हैं? परिभाषा के अनुसार, एक स्ट्रीम unbounded है। जब तक कुछ और बाधाएं न हों, तब तक आप एक असंबद्ध धारा से स्ट्रिंग (निश्चित आकार का कुछ) नहीं प्राप्त कर सकते हैं। –

+2

यह कई बार कहा गया है: http://stackoverflow.com/questions/1763789/how-do-i-convert-an-inputstream-to-a-string-in-java – bakkal

+0

http://stackoverflow.com/ प्रश्न/309,424/इन-जावा है कि कैसे करते हैं-एक-पढ़ने के लिए एक इनपुट स्ट्रीम में टु-ए-स्ट्रिंग –

उत्तर

8

यहां गोपी के उत्तर का एक संशोधन है जिसमें लाइन समाप्त होने वाली समस्या नहीं है और यह भी अधिक प्रभावी है क्योंकि इसे प्रत्येक पंक्ति के लिए अस्थायी स्ट्रिंग ऑब्जेक्ट्स की आवश्यकता नहीं है और BufferedReader में अनावश्यक प्रतिलिपि से बचने और रीडलाइन में अतिरिक्त कार्य से बचाता है()।

public static String convertStreamToString(InputStream is, String ecoding) throws IOException 
{ 
    StringBuilder sb = new StringBuilder(Math.max(16, is.available())); 
    char[] tmp = new char[ 4096 ]; 

    try { 
     InputStreamReader reader = new InputStreamReader(is, ecoding); 
     for(int cnt; (cnt = reader.read(tmp)) > 0;) 
      sb.append(tmp, 0, cnt); 
    } finally { 
     is.close(); 
    } 
    return sb.toString(); 
} 
+1

+1 अधिक सेन एन्कोडिंग हैंडलिंग। –

0

एक रीडर में लपेटें स्ट्रीम स्थान रूपांतरण प्राप्त करने के लिए, और फिर एक StringBuffer में इकट्ठा जबकि पढ़ते रहें। पूरा होने पर, स्ट्रिंगबफर पर एक ToString() करें।

5

आप इनपुट धारा रैप करने के लिए एक InputStreamReader का निर्माण करने की जरूरत है, बाइनरी डेटा और पाठ के बीच परिवर्तित। अपने इनपुट स्रोत के आधार पर उचित एन्कोडिंग निर्दिष्ट करें।

बार जब आप एक InputStreamReader मिल गया है, तो आप एक BufferedReader बना सकते हैं और पढ़ लाइन द्वारा सामग्री लाइन, या बस बफ़र-दर-बफर और read() कॉल रिटर्न -1 जब तक एक StringBuilder को संलग्न पढ़ें।

Guava लाइब्रेरी इस आसान उपयोग का दूसरा हिस्सा CharStreams.toString(inputStreamReader) बनाता है।

+0

मैंने कभी यह कोशिश नहीं की है, लेकिन आपको इस बारे में अवगत नहीं होना चाहिए कि धारा पहले क्या प्रस्तुत करती है तुम इसे करो? यदि आपके पास ऐसी धारा थी जो पढ़ती है() कभी वापस नहीं आती है, तो कोशिश करने में भी कोई मूल्य नहीं होगा। लेकिन, साथ ही, मैं अपने सिर के ऊपर से एक धारा के बारे में नहीं सोच सकता जो कभी समाप्त नहीं होता है। –

+1

@ थॉमस: ठीक है, आप आसानी से एक स्ट्रीम बना सकते हैं जो केवल यादृच्छिक संख्याएं देता है। मैं यह मान रहा था कि सवाल उस स्थिति में पूछा गया था जहां "स्ट्रीम के अंत तक पढ़ा गया" की अवधारणा वास्तव में समझ में आई थी ... –

2

यहाँ here से अनुकूलित एक उदाहरण कोड है।

public String convertStreamToString(InputStream is) throws IOException { 
     /* 
     * To convert the InputStream to String we use the BufferedReader.readLine() 
     * method. We iterate until the BufferedReader return null which means 
     * there's no more data to read. Each line will appended to a StringBuilder 
     * and returned as String. 
     */ 
     if (is != null) { 
      StringBuilder sb = new StringBuilder(); 
      String line; 

      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
       while ((line = reader.readLine()) != null) { 
        sb.append(line).append("\n"); 
       } 
      } finally { 
       is.close(); 
      } 
      return sb.toString(); 
     } else {  
      return ""; 
     } 
    } 
+2

ध्यान दें कि लाइन अंतराल को सामान्यीकृत करेगा - यह आवश्यक मूल पाठ को जरूरी नहीं करेगा डेटा। –

+0

सच। आपके सुझाव को शामिल करने के लिए संपादित कोड। – Gopi

+0

अब इसमें लाइन अंतराल शामिल नहीं होगा। मुझे लगता है कि जॉन स्कीट सिर्फ यह कह रहा था कि '\ r \ n' (या '\ r') समाप्त होने वाली प्रत्येक पंक्ति' \ n' बन जाती है। –

0

आप निम्नानुसार StringWriter का भी उपयोग कर सकते हैं; अपने InputStream से प्रत्येक read एक write (या append) StringWriter के साथ मिलान किया जाता है, और पूरा होने पर आप getBuffer फोन एक StringBuffer जो सीधे इस्तेमाल किया जा सकता प्राप्त करने के लिए कर सकते हैं या आप अपने toString विधि कॉल हो सकता है।

3

तुम भी Apache Commons IO library

उपयोग कर सकते हैं विशेष रूप से, आप उपयोग कर सकते IOUtils#toString(InputStream inputStream) method

+0

एक सॉफ्टवेयर इंजीनियर के रूप में, मुझे यह पसंद है। काम पूरा करने के लिए मौजूदा पुस्तकालयों का पुन: उपयोग करना। अपाचे कॉमन्स (और सामान्य रूप से अपाचे परियोजनाओं में से सभी) बहुत अच्छी तरह से किए जाते हैं और कई स्थितियों में काफी सहायक होते हैं। –

+0

ध्यान दें कि ऊपर दी गई विधि का उपयोग प्लेटफ़ॉर्म डिफ़ॉल्ट एन्कोडिंग का उपयोग करता है, यानी परिणाम उपयोगकर्ता सेटिंग्स या अन्य बाहरी कारकों पर निर्भर करता है। अधिकतर समय एन्कोडिंग को अतिरिक्त पैरामीटर के रूप में अपेक्षित करने के लिए एक विधि का उपयोग करना बेहतर होता है। [इस प्रश्न पर एक संबंधित प्रश्न पर देखें] (http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string#comment4886900_309448)। अपाचे 'IOUtils' भी ऐसी विधियां प्रदान करता है। बीटीडब्ल्यू, जावाडोक का लिंक टूटा हुआ है ... – siegi

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