cuốn sách gpt4 ai đã làm

Làm cách nào để có được Dòng đầu vào của dữ liệu đã giải nén từ Dòng đầu vào của dữ liệu GZIP?

In lại Tác giả: Taklimakan 更新时间:2023-11-03 03:22:05 29 4
mua khóa gpt4 Nike

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

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

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

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

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

    ByteArrayInputStream xmlInput = null;
thử {
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;
thử {
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());

câu trả lời hay nhất

GZIPĐầu vàoLuồng 修饰输入流.

InputStream decompressed = new GZIPInputStream(compressed);

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

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress