java - 如何从 GZIPInputstream 读取

标签 java

场景是读取一个gzip文件(扩展名为.gz)

知道有 GZIPInputStream 类来处理这个。

这里是将文件对象转换为 GZIPStream 的代码。

FileInputStream fin = new FileInputStream(FILENAME);
 GZIPInputStream gzis = new GZIPInputStream(fin);

疑问是如何从这个'gzis'对象中读取内容?

最佳答案

从 InputStream 解码字节,您可以使用 InputStreamReader。 BufferedReader 将允许您逐行读取您的流。

如果 zip 是文本文件

ByteArrayInputStream bais = new ByteArrayInputStream(responseBytes);
GZIPInputStream gzis = new GZIPInputStream(bais);
InputStreamReader reader = new InputStreamReader(gzis);
BufferedReader in = new BufferedReader(reader);

String readed;
while ((readed = in.readLine()) != null) {
  System.out.println(readed);
}

如评论中所述。它会忽略编码,并且可能无法始终正常工作。

更好的解决方案

它将未压缩的数据写入destinationPath

FileInputStream fis = new FileInputStream(sourcePath);
FileOutputStream fos = new FileOutputStream(destinationPath);
GZIPInputStream gzis = new GZIPInputStream(fis);
byte[] buffer = new byte[1024];
int len = 0;

while ((len = gzis.read(buffer)) > 0) {
    fos.write(buffer, 0, len);
}

fos.close();
fis.close();
gzis.close();

关于java - 如何从 GZIPInputstream 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35789253/

相关文章:

java - 快速重新着色位图

java - Java 中的输出忽略方法

Java 小程序 : How to make sure destroy is finished before page refresh

java.lang.ClassFormat错误: when trying to mock HttpServletRequest using Mockito

java - 如何在 Kotlin 中实现可空 "beanName"的 BeanPostProcessor?

java - 如何从 json 文件获取 json 对象

java - 如何使用 java 作为输入逗号分隔文件来过滤具有高于平均水平的特定列值的行

java - Weblogic到tomcat迁移性能问题

java - 通过java打开需要认证的网页

java - Wicket 请求映射