Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 如何从GZIPInputstream读取_Java - Fatal编程技术网

Java 如何从GZIPInputstream读取

Java 如何从GZIPInputstream读取,java,Java,场景是读取gzip文件(.gz扩展名) 要知道有GZIPInputStream类来处理这个问题 下面是将文件对象转换为GZIPStream的代码 FileInputStream fin = new FileInputStream(FILENAME); GZIPInputStream gzis = new GZIPInputStream(fin); 问题是如何从这个“gzis”对象读取内容?从InputStream解码字节,您可以使用InputStreamReader。BufferedRead

场景是读取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();
我建议你使用

添加Maven依赖项:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.10</version>
</dependency>

org.apache.commons

我很困惑,那只是一个InputStream,你像其他InputStream一样读取它。但是你可能会混淆zip和gzip。是的,它不是zip。我更新了。你读取GZIPInputStream的方式与读取文件InputStream的方式完全相同,如果数据没有被GZIPP。如果是二进制的,则读入字节数组。如果是文本,则使用InputStreamReader进行换行,指定字符编码。假设gzip内容是文本,而不是二进制数据。这假设内容是文本,由行组成。并忽略可能使用的编码内容仅为文本。你所说的输入编码是什么意思?如果内容是纯文本,那么使用第一种解决方案。然后它只输出字符串。第二种解决方案是将解压缩文件写入目标路径。@Andreas现在满意了。谢谢你的通知。