2016-10-26 8 views
0

CharBufferを使用してアプリケーションでStringをデコードしています。 しかし、CharBuffer.toStringを使用すると、toStringメソッドが呼び出されるたびにStringオブジェクトが作成されるように見えます。 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

はい、読み取りメソッドのほとんどの結果は同じです。このメソッドは非常に嫌なので、私はreadメソッドの結果をプールするのが好きです。 –

答えて

1

toString()メソッドが呼び出されるたびにStringオブジェクトが作成されているように見えます。

もちろんです。それがそれのためのものです。あなたはいつもそれをあまり頻繁に呼び出すことはできません変更されていなければポイントはありません。

私はCharBufferを使用するときに文字列プールを使用する方法はあります。

intern()Stringsです。しかし、私はそれを残しておきます。 Stringsは通常のイベントの流れでガベージコレクションされます。

関連する問題