Cod*_*ile 2 java string optimization android sax
我在我的Android应用程序中实现了一个java SAX解析器.
我已经完成了所有工作,但我正在尝试优化一个小块,它可以吸收更多需要的内存.
这是我目前(我知道效率很低)DefaultHandler的character()函数的实现.
String currentText = "";
@Override
public void characters(char[] ch, int start, int length)
{
if(currentText.length() > 0)
{
currentText = currentText.concat(new String(ch, start, length));
}else
{
//Takes half as much memory as concating to empty string
currentText = new String(ch, start, length);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,当SAX遇到元素内的文本时,会调用此函数.重要的是要注意,整个文本不能保证一次解析,因此必须将新字符附加到当前currentText中的任何文本(请注意,currentText在每个元素的末尾设置为"").
我只是把这些代码放在一起使它工作,所以我可以测试我的解析器的其余部分,但这需要进行优化.
关于如何实现这个以尽可能少使用内存的任何建议?
StringBuilder currentText = new StringBuilder();
@Override
public void characters(char[] ch, int start, int length)
{
currentText.append(ch, start, length);
}
Run Code Online (Sandbox Code Playgroud)
稍后您可以通过致电获取全文currentText.toString().
更新以模拟修剪:
@Override
public void characters(char[] ch, int start, int length)
{
if(length == 0) return;
int end = (start + length) - 1;
while(char[start] <= '\u0020')
{
if(start == end) return;
start++;
length--;
}
while(char[end] <= '\u0020')
{
if(end == start) return;
length--;
end--;
}
currentText.append(ch, start, length);
}
Run Code Online (Sandbox Code Playgroud)