के रूप में कई पहले से ही सुझाव दिया है, आप CharBuffer वर्ग का उपयोग कर सकते, लेकिन एक नए CharBuffer आवंटन केवल आपकी समस्या को और खराब कर देगा।
इसके बजाय, आप सीधे अपने StringBuilder एक CharBuffer में, लपेट कर सकते हैं के बाद से StringBuilder CharSequence लागू करता है:
Charset charset = StandardCharsets.UTF_8;
CharsetEncoder encoder = charset.newEncoder();
// No allocation performed, just wraps the StringBuilder.
CharBuffer buffer = CharBuffer.wrap(stringBuilder);
ByteBuffer bytes = encoder.encode(buffer);
संपादित करें: ड्यूआर्टे सही ढंग से बताते हैं कि CharsetEncoder.encode
विधि एक बफर जिसका समर्थन सरणी से बड़ा है वापस आ सकते हैं वास्तविक डेटा-अर्थ, इसकी क्षमता इसकी सीमा से बड़ी है। बाइटबफर से खुद को पढ़ने के लिए या बाइटबफर से बाहर बाइट सरणी पढ़ने के लिए जरूरी है जिसे सही आकार की गारंटी दी जाती है।
ByteBuffer byteBuffer = encoder.encode(buffer);
byte[] array;
int arrayLen = byteBuffer.limit();
if (arrayLen == byteBuffer.capacity()) {
array = byteBuffer.array();
} else {
// This will place two copies of the byte sequence in memory,
// until byteBuffer gets garbage-collected (which should happen
// pretty quickly once the reference to it is null'd).
array = new byte[arrayLen];
byteBuffer.get(array);
}
byteBuffer = null;
निकटतम आप प्राप्त कर सकते हैं 'char [] 'सरणी प्राप्त करना। स्ट्रिंगबफर # getChars (int, int, char [], int) –
इसके बजाय [CharBuffer] (http://docs.oracle.com/javase/7/docs/api/java/nio/CharBuffer.html) का उपयोग क्यों नहीं करें? और फिर "charBuffer.array()" करते हैं? – tolitius
क्या आप स्पष्टीकरण दे सकते हैं कि आपको इन सभी बड़े तारों को स्मृति में क्यों स्टोर करना होगा? क्या यह कोई उपयोगकर्ता इंतजार कर रहा है? क्या यह बदले में मैपरेडस या स्पार्क नौकरी बन सकता है? मुझे आश्चर्य है कि शायद यह सवाल एक वास्तुशिल्प डिजाइन गंध का एक लक्षण है। – Vidya