所以我XMLStreamReader
用来解析一个xml文档,其中包含<Data>....</Data>
我必须逐行提取和解码的标签之间的Base64编码数据。我为XMLInputFactory
:设置了以下属性,xmlInputFactory.setProperty("javax.xml.stream.isCoalescing",true)
以便标签内的所有 Base64 编码文本都在一个事件<Data>....</Data>
中累积。CHARACTER
但是,当我将数据提取到char
大小为 1024 字节的缓冲区中时,字符的顺序会被打乱。而且由于订单被打乱了,我无法对其进行解码。下面是我的代码:
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
xmlInputFactory.setProperty("javax.xml.stream.isCoalescing",true);
FileInputStream inputStream = new FileInputStream(tmpFile);
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(inputStream);
while(xmlStreamReader.hasNext()){
if(xmlStreamReader.isStartElement() && xmlStreamReader().getName().getLocalPart().equals("Data"))
{
xmlStreamReader.next() // get Character event
int length = 1024;
char[] buffer = new char[1024];
int sourceStart = 0;
FileOutputStream out = new FileOutputStream(targetFile);
for(sourceStart=0;;sourceStart+=length){
int numCopied = xmlStreamReader.getTextCharacters(sourceStart, buffer, 0, length);
out.write(Base64.getMimeDecoder().decode(new String(buffer).getBytes()));
if(numCopied < length){
break;
}
}
}
}
<Data>....</Data>
所以标签之间总共有 23944 个字符。此外,当异常发生sourceStart
在 23552 并且第 396 个字节有错误时。同样,当
sourceStart
在 23552 时,numCopied
值 1024 显然是不正确的,因为我应该只有 23944 个字符,因此if(numCopied < length)
永远不会成为真的。知道为什么会这样吗?此外,要解码的数据是机密的,所以我可能无法分享。对不起!