私たちはJava SAXを使って、本当に大きなXMLファイルを解析しています。私たちのcharacters
実装には、次のようになります。Javaのchar []、start、lengthから文字列を作成する効果的な方法
@Override
public void characters(char ch[], int start, int length) throws SAXException {
String value = String.copyValueOf(ch, start, length);
...
}
(SAXで渡さch[]
配列がかなり長くなる傾向にある)しかし、我々は最近、いくつかのパフォーマンスの問題を得ているし、プロファイラは、私たちを示している私達のCPUの20%以上使用量はString.copyValueOf
(これはフードの下でnew String(ch,start,length)
を呼び出した)の上です。
String.copyValueOf(ch, start, length)
またはnew String(ch,start,length)
より文字、開始インデックス、および長さの配列から文字列を取得する方法がありますか?
悪化する可能性がありますが、 'StringBuilder'を試してみましたか? 'new String(ch、start、length)'は配列をコピーするだけですが、 'StringBuilder'がどのくらい速く動作するかはわかりません。 – Djon
作成されたStringは返されません。あなたはそれで何をしていますか?その文字列で行われる処理は、startとlengthを使ってchar []で直接行うこともできますか? – Fildor
@Fildorええ、私はそれについて考えました。しかし、私たちはストリングとして扱うところで、多くの異なる操作を行います。 char配列を操作するのは非常に困難です(少なくともコードは実際には醜いでしょう)。 –