如何压缩和base64 一个org.w3c.dom.Document



我有一个org.w3c.dom.Document,必须对其进行zip和base64编码,以便通过HTTP/HTTPS使用EBICS协议发送它我试过了

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    Source xmlSource = new DOMSource(doc);
    Result outputTarget = new StreamResult(outputStream);
    TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);
    InputStream inflated_stream = new InflaterInputStream(new ByteArrayInputStream(outputStream.toByteArray()));
    final byte[] bytes64bytes = Base64.encodeBase64(IOUtils.toByteArray(inflated_stream));
    OrderData = new String(bytes64bytes);

但得到一个例外

java.util.zip.ZipException: incorrect header check
        at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
        at java.io.FilterInputStream.read(FilterInputStream.java:107)
        at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1025)
        at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
        at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:218)

我没有尝试过这个,但以下内容不会满足您的需求吗?

OutputStream outputStream = new ZipOutputStream(new ByteArrayOutputStream());

我认为您的问题可能归结为使用InflaterInputStream - 您不是想放气吗?如果您只是将InflaterInputStream更改为DeflaterInputStream,您的代码可能会起作用

更改

InputStream inflated_stream = new InflaterInputStream(new ByteArrayInputStream(outputStream.toByteArray()));

InputStream inflated_stream = new DeflaterInputStream(new ByteArrayInputStream(outputStream.toByteArray()));

解决了问题谢谢

相关内容

最新更新