我使用CharBuffer来解码我的应用程序中的String。 但是当我使用CharBuffer.toString时,看起来每当调用toString方法时都会创建String对象。 使用CharBuffer时有没有办法使用字符串池? Follwing是我的方法,提前谢谢。
private CharBuffer charbuf = CharBuffer.allocate(32000);
private String read(ByteBuffer buf, CharsetDecoder decoder)
{
charbuf.clear();
while (buf.remaining() > 0)
{
CoderResult result = decoder.decode(buf, charbuf, true);
if (result == CoderResult.OVERFLOW)
{
throwInternalError();
}
if (result.isError())
{
char data = (char)buf.get();
if (result.isUnmappable())
{
charbuf.put('?');
}
else if (result.isMalformed())
{
charbuf.put(data);
}
}
}
charbuf.flip();
return charbuf.toString();
}
答案 0 :(得分:1)
只要调用
String
方法,就会创建toString()
个对象。
当然。这就是它的用途。你总是可以不经常调用它。没有意义,如果它没有改变。
使用
CharBuffer
时,有没有办法使用字符串池。
你可以intern()
Strings
。但我会不管它。 Strings
将在正常的事件过程中被垃圾收集。