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