zaten sen CharBuffer sınıfını kullanın, ancak yeni bir CharBuffer tahsis edebilir önerdi gibi birçok sadece probleminizi daha da kötüleştirebilir. StringBuilder CharSequence uygulayan beri
Bunun yerine, direkt olarak, bir CharBuffer daki StringBuilder kaydırılabilir:
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);
DÜZENLEME: Duarte doğru CharsetEncoder.encode
yöntem, destek dizisi daha büyük olan bir tampon döndürebilir işaret gerçek veriler — anlam, kapasitesi kendi sınırından daha büyüktür. ByteBuffer'ın kendisinden okumak ya da ByteBuffer'dan doğru boyutta olması garanti edilen bir bayt dizisini okumak gerekir. Eğer performansı istiyorsanız
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;
En yakın alabileceğiniz bir 'char []' dizisi elde etmektir. StringBuffer # getChars (int, int, char [], int) –
neden [CharBuffer] (http://docs.oracle.com/javase/7/docs/api/java/nio/CharBuffer.html) kullanmıyorsunuz? Ve sonra "charBuffer.array()"? – tolitius
Tüm bu büyük dizeleri neden bellekte saklamanız gerektiğini açıklayabilir misiniz? Bu bir kullanıcının beklediği bir şey mi? Bunun yerine bir MapReduce veya Spark işi olabilir mi? Merak ediyorum, belki bu soru bir mimari tasarım kokusunun bir belirtisidir. – Vidya