यदि यह छोटा कथन है जो आप चाहते हैं, तो स्ट्रिंग चरण के बीच में कोई रास्ता नहीं है। स्ट्रिंग कन्स्ट्रक्टर एक बहुत ही सामान्य मामले में सुविधा के लिए रूपांतरण और ऑब्जेक्ट निर्माण को मिश्रित करता है, लेकिन स्ट्रिंगबिल्डर के लिए ऐसा कोई सुविधा कन्स्ट्रक्टर नहीं है।
यदि यह प्रदर्शन आप में रुचि रखते हैं है, तो आप मध्यवर्ती स्ट्रिंग ऑब्जेक्ट कुछ इस तरह का उपयोग करके न करना चाहें:
new StringBuilder(Charset.forName(charsetName).decode(ByteBuffer.wrap(inBytes)))
आप फ़ाइन-ट्यून करने के लिए प्रदर्शन में सक्षम होना चाहते हैं, तो आप नियंत्रित कर सकते हैं खुद को संसाधित करें। उदाहरण के लिए, आप औसतCharsPerByte का उपयोग करके कितनी मेमोरी की आवश्यकता होगी, इस अनुमान के रूप में, आप बहुत अधिक स्मृति का उपयोग करने से बचना चाह सकते हैं। बफर का आकार बदलने के बजाय यदि अनुमान बहुत छोटा था, तो आप परिणामस्वरूप स्ट्रिंगबिल्डर का उपयोग सभी भागों को जमा करने के लिए कर सकते थे।
CharsetDecoder cd = Charset.forName(charsetName).newDecoder();
cd.onMalformedInput(CodingErrorAction.REPLACE);
cd.onUnmappableCharacter(CodingErrorAction.REPLACE);
int lengthEstimate = Math.ceil(cd.averageCharsPerByte()*inBytes.length) + 1;
ByteBuffer inBuf = ByteBuffer.wrap(inBytes);
CharBuffer outBuf = CharBuffer.allocate(lengthEstimate);
StringBuilder out = new StringBuilder(lengthEstimate);
CoderResult cr;
while (true) {
cr = cd.decode(inBuf, outBuf, true);
out.append(outBuf);
outBuf.clear();
if (cr.isUnderflow()) break;
if (!cr.isOverflow()) cr.throwException();
}
cr = cd.flush(outBuf);
if (!cr.isUnderflow()) cr.throwException();
out.append(outBuf);
मुझे शक है कि इसके बाद के संस्करण कोड, हालांकि ज्यादातर अनुप्रयोगों में प्रयास के लायक हो जाएगा। यदि कोई एप्लिकेशन प्रदर्शन में रूचि रखता है, तो शायद इसे स्ट्रिंगबिल्डर से भी निपटना नहीं चाहिए, लेकिन बफर स्तर पर सब कुछ संभाल लें।
मुझे हिम्मत है कि यह सैद्धांतिक रूप से इष्टतम नहीं है, लेकिन क्या यह वास्तव में एक * समस्या * है? क्या आपने यह दिखाने के लिए उचित परीक्षण किए हैं कि इसका क्या असर पड़ रहा है? –
उस स्ट्रिंगबिल्डर के साथ आप क्या कर रहे हैं? – Thilo
यदि आप डिकोडिंग प्रक्रिया पर अधिक नियंत्रण चाहते हैं और यह किस स्मृति का उपयोग करता है, तो आप सीधे ['CharsetDecoder'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset का उपयोग कर सकते हैं) /CharsetDecoder.html) और समर्पित 'CharBuffer' (' स्ट्रिंगबिल्डर 'का उपयोग करने के बजाय) में डीकोड करें। –