2016-10-26 27 views
0

我使用CharBuffer來解碼我的應用程序中的字符串。 但是,當我使用CharBuffer.toString,它看起來像字符串對象創建每當toString方法被調用。 當我使用CharBuffer時,有什麼方法可以使用字符串池嗎? Follwing是我的方法,在此先感謝。java CharBuffer.toString創建太多對象

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

你想游泳什麼?您是否使用相同的'ByteBuffer'(或具有相同內容的ByteBuffers)重複調用此方法 – Thilo

+0

是的,讀取方法的大多數結果是相同的。由於這種方法被稱爲非常流行,我喜歡將讀取方法的結果集中起來。 –

回答

1

它看起來像創建String對象時toString()方法被調用。

當然。這就是它的目的。你可以經常調用它。沒有意義,如果它沒有改變。

當我使用CharBuffer時,有什麼方法可以使用字符串池嗎?

你可以intern()Strings。但我會放棄它。在正常情況下,Strings將被垃圾收集。