gpt4 book ai didi

java - 如何从 GZIP 数据的 InputStream 中获取解压缩数据的 InputStream?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:05 28 4
gpt4 key购买 nike

我调用了一个返回压缩文件的服务。我从响应中将数据作为 InputStream(由 javax.activation.DataHandler.getInputStream(); 提供)提供。

我想做的是,在不向磁盘写入任何内容的情况下,获取存档文件中解压缩数据的 InputStream。在这种情况下,压缩文件是一个 xml 文档,我试图使用 javax.xml.bind.Unmarshaller 对其进行解码,它采用 InputStream。

我目前正在尝试将 InputStream 写入 OutputStream(解压缩数据),然后我需要将其写回 InputStream。它还没有用,所以我想我会看看是否有更好的(我希望如此)方法。

我可以将初始 InputStream 写入磁盘并获取 gz 文件,然后读取该文件,从中获取压缩文件并从那里开始,但我宁愿将其全部保存在内存中也是可能的。

更新 1:这是我当前的(不工作 - 得到“不是 GZIP 格式”的异常):

    ByteArrayInputStream xmlInput = null;
try {
InputStream in = dh.getInputStream(); //dh is a javax.activation.DataHandler
BufferedInputStream bis = new BufferedInputStream(in);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int bytes_read = 0;
byte[] dataBuf = new byte[4096];
while ((bytes_read = bis.read(dataBuf)) != -1) {
bo.write(dataBuf, 0, bytes_read);
}
ByteArrayInputStream bin = new ByteArrayInputStream(bo.toByteArray());
GZIPInputStream gzipInput = new GZIPInputStream(bin);
ByteArrayOutputStream out = new ByteArrayOutputStream();
dataBuf = new byte[4096];;
bytes_read = 0;
while ((bytes_read = gzipInput.read(dataBuf)) > 0) {
out.write(dataBuf, 0, bytes_read);
}
xmlInput = new ByteArrayInputStream(out.toByteArray());

如果我第一次写入 FileOutputStream 而不是写入 ByteArrayOutputStream,我得到一个压缩文件(我可以手动打开它以获取其中的 xml 文件)并且服务 (eBay) 说它应该是一个 gzip 文件所以我不确定为什么会收到“不是 GZIP 格式”错误。

更新 2:我尝试了一些不同的东西 - 同样的错误(“不是 GZIP 格式”)。哇,我只是想用分号结束那个括号。无论如何,这是我的第二次尝试,但仍然无效:

    ByteArrayInputStream xmlInput = null;
try {
GZIPInputStream gzipInput = new GZIPInputStream(dh.getInputStream());
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int bytes_read = 0;
byte[] dataBuf = new byte[4096];
while ((bytes_read = gzipInput.read(dataBuf)) != -1) {
bo.write(dataBuf, 0, bytes_read);
}
xmlInput = new ByteArrayInputStream(bo.toByteArray());

最佳答案

GZIPInputStream 修饰输入流.

InputStream decompressed = new GZIPInputStream(compressed);

关于java - 如何从 GZIP 数据的 InputStream 中获取解压缩数据的 InputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744290/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com