2011-02-09 16 views
14

पर जावा बाइट सरणी का हिस्सा संलग्न करें मैं जावा के तहत एक स्ट्रिंगबिल्डर ऑब्जेक्ट में बाइट सरणी का एक हिस्सा कैसे जोड़ूं? मेरे पास एक फ़ंक्शन का एक सेगमेंट है जो एक इनपुटस्ट्रीम से बाइट सरणी में पढ़ता है।स्ट्रिंगबिल्डर

byte[] buffer = new byte[4096]; 
InputStream is; 
// 
//some setup code 
// 
while (is.available() > 0) 
{ 
    int len = is.read(buffer); 
    //I want to append buffer[0] to buffer[len] into StringBuilder at this point 
} 

उत्तर

18

आप इस के लिए एक StringBuilder उपयोग नहीं करना चाहिए, क्योंकि यह कर सकते हैं परिवर्तनीय चौड़ाई एनकोडिंग के लिए एन्कोडिंग त्रुटियों का कारण है। आप एक java.io.ByteArrayOutputStream बजाय उपयोग कर सकते हैं, और यह एक स्ट्रिंग के लिए कनवर्ट जब सभी डेटा को पढ़ने कर दिया गया है एन्कोडिंग मल्टी-बाइट युक्त श्रृंखलाएँ नहीं जाना जाता है

byte[] buffer = new byte[4096]; 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
InputStream is; 
// 
//some setup code 
// 
while (is.available() > 0) { 
    int len = is.read(buffer); 
    out.write(buffer, 0, len); 
} 
String result = out.toString("UTF-8"); // for instance 

(आप ASCII डेटा के साथ काम कर रहे हैं, उदाहरण के लिए) , फिर StringBuilder का उपयोग कर काम करेगा।

12

तुम सिर्फ अपने बफर के बाहर एक स्ट्रिंग बना सकते हैं:

String s = new String(buffer, 0, len);

तो अगर आप की जरूरत है आप इसे जोड़ सकते हैं करने के लिए मैं तो संलग्न करने के लिए जो कुछ भी मैं एक StringBuilder वस्तु में पढ़ा चाहते हैं एक स्ट्रिंगबिल्डर को।

+2

आपका टेक्स्ट किस एन्कोडिंग का उपयोग करता है? उपरोक्त विधि ASCII के साथ काम करेगा लेकिन यूटीएफ -8 या यूटीएफ -16 जैसे किसी भी बहु-बाइट स्ट्रिंग पर असफल हो सकता है (आप बफर से आंशिक स्ट्रिंग पढ़ सकते हैं और अंत में केवल चार परिभाषा प्राप्त कर सकते हैं; अगले भाग के लिए अमान्य शुरुआत भी छोड़ सकते हैं) – tomash

+3

'स्ट्रिंग एस = नया स्ट्रिंग (बफर, 0, लेन," यूटीएफ -8 ");' ASCII –

+0

की तुलना में अन्य एन्कोडिंग के लिए, यदि आप 'ByteArrayOutputStream' से तेज़ प्रदर्शन करते हैं तो क्या आप किसी भी मौके से जांचते हैं? मुझे लगता है कि यह होगा। – Kashyap

-2

नीचे जैसा कुछ भी आपके लिए चाल करना चाहिए।

byte[] buffer = new byte[3]; 
buffer[0] = 'a'; 
buffer[1] = 'b'; 
buffer[2] = 'c'; 
StringBuilder sb = new StringBuilder(new String(buffer,0,buffer.length-1)); 
System.out.println("buffer has:"+sb.toString()); //prints ab 
संबंधित मुद्दे