0

所以我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)永远不会成为真的。知道为什么会这样吗?此外,要解码的数据是机密的,所以我可能无法分享。对不起!

4

0 回答 0