Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从xml解析二进制数据?_Java_Xml_Jaxb_Sax_Stax - Fatal编程技术网

Java 如何从xml解析二进制数据?

Java 如何从xml解析二进制数据?,java,xml,jaxb,sax,stax,Java,Xml,Jaxb,Sax,Stax,正在尝试为学校项目使用STAX解析xml。如果我有一个元素: <binary data></binary data> 有一个可以让你读二进制“零碎的”。谢谢。我可以使用这个方法和流或者其他什么,这样我就不需要把所有的东西都保存在内存中了吗?请看我问题中的edit。如果你将它输入到聚合器,你仍然会得到内存中的所有内容,除了长度将被限制为缓冲区的长度。要做什么实际上取决于您必须对数据做什么:如果您想要流式输出数据,您可以简单地将读取的数据写入输出流,并从缓冲区的开始处开始。

正在尝试为学校项目使用
STAX
解析xml。如果我有一个元素:

<binary data></binary data>

有一个可以让你读二进制“零碎的”。谢谢。我可以使用这个方法和流或者其他什么,这样我就不需要把所有的东西都保存在内存中了吗?请看我问题中的edit。如果你将它输入到聚合器,你仍然会得到内存中的所有内容,除了长度将被限制为缓冲区的长度。要做什么实际上取决于您必须对数据做什么:如果您想要流式输出数据,您可以简单地将读取的数据写入输出流,并从缓冲区的开始处开始。如果要搜索该数据中的某些内容,可以搜索缓冲区并丢弃数据。具体行动取决于你想要达到的目标。请容忍我。最后,我需要将这些数据保存到db中,所以我需要InputStream。所以我需要写入OutputStream,然后通过管道传输,对吗?如果你有时间的话,你能写一些代码吗?我没有太多时间,这就是为什么我要把它写进评论,而不是答案。实际上,您正在做的是流复制。查看并获取有关如何有效执行此操作的信息。
private byte[] readBinary(XMLStreamReader2 sr) throws XMLStreamException {
        Stax2Util.ByteAggregator aggr = new Stax2Util.ByteAggregator();        
        byte[] buffer = aggr.startAggregation();
        while (true) {
            int offset = 0;
            int len = buffer.length;
            do {
                int readCount = sr.readElementAsBinary(buffer, offset, len);
                if (readCount < 1) { // all done!
                    return aggr.aggregateAll(buffer, offset);
                }
                offset += readCount;
                len -= readCount;
            } while (len > 0);
            buffer = aggr.addFullBlock(buffer);
        }
    }