Java android sax解析器不完整的字符数组
我找到了一些与这个问题相关的帖子,但没有找到解决方案。问题是,在character()函数上,ch[]数组包含上次调用的不完整或最后一个元素,这种情况有时会发生,但98%的情况下工作正常。文件名没有特殊字符,也没有奇怪的名称 如果有,Java android sax解析器不完整的字符数组,java,android,saxparser,Java,Android,Saxparser,我找到了一些与这个问题相关的帖子,但没有找到解决方案。问题是,在character()函数上,ch[]数组包含上次调用的不完整或最后一个元素,这种情况有时会发生,但98%的情况下工作正常。文件名没有特殊字符,也没有奇怪的名称 如果有, <tag>image1test.jpg<tag> <tag>image2bla.jpg<tag> 解析器不需要在处理程序上只调用一次字符(char[],int,int)。您必须期待多个调用,并且仅在调用endEl
<tag>image1test.jpg<tag>
<tag>image2bla.jpg<tag>
解析器不需要在处理程序上只调用一次
字符(char[],int,int)
。您必须期待多个调用,并且仅在调用endElement()
方法后处理该值
public class Handler extends DefaultHandler {
private StringBuilder sb = new StringBuilder();
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
sb.append(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
doStuffWith(sb.toString());
sb = new StringBuilder();
}
}
我不知道Android环境中是否有StringBuilder。我的样品来自香草爪哇。您可能不会选择完全这样做,但它说明了解析器如何随时调用
characters()
,您必须做好准备。是的,Android中有一个stringBuilder。我会尽力通知你的。感谢您没有解决方案,因为字符串的组成正确,问题来自已经包含剩余字符的ch[]。所以,如果ch[]包含错误的字符串,则不介意以后如何编写字符串。在你的真实代码中,你确定你尊重被调用的“长度”吗?如果您使用start=0 len=6
获得[i,m,a,g,e,2,b,e,s,t]
,然后使用start=0和len=6
获得[l,a,j,p,g,b,e,s,t]
,这一切都很好,因为您永远不应该读取最后4个字符。当然,问题是某些字符有剩余信息或字符数组未完成。从“image2bla.jpg”我们可以得到“image2”或“image2tes”。所以字符数组被破坏了。这种情况每100次发生一次!
public class Handler extends DefaultHandler {
private StringBuilder sb = new StringBuilder();
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
sb.append(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
doStuffWith(sb.toString());
sb = new StringBuilder();
}
}