java - 如何使用 GZIPInputStream 修复 EOF 读取错误
问题描述
我正在尝试读取 gzip 文件的内容并从中创建一个文件。我遇到了一个我无法弄清楚的问题。任何建议的想法表示赞赏。谢谢你。
private static String unzip(String gzipFile, String location){
try {
FileInputStream in = new FileInputStream(gzipFile);
FileOutputStream out = new FileOutputStream(location);
GZIPInputStream gzip = new GZIPInputStream(in);
byte[] b = new byte[1024];
int len;
while((len = gzip.read(b)) != -1){
out.write(buffer, 0, len);
}
out.close();
in.close();
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
}
java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:116)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
解决方案
通过使用资源块来确保正确关闭文件,您将使自己的生活更轻松。例如:
private static String unzip(String gzipFile, String location){
try (
FileInputStream in = new FileInputStream(gzipFile);
GZIPInputStream gzip = new GZIPInputStream(in);
FileOutputStream out = new FileOutputStream(location))
{
byte[] b = new byte[4096];
int len;
while((len = gzip.read(b)) >= 0){
out.write(b, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
您还应该确保您有一个有效的 .zip 文件(当然!)并且您的输入和输出文件名不同。
“缓冲区”是怎么回事?我假设(和 GPI 一样)您可能的意思是“b”?
推荐阅读
- c++ - 如何将 uint8 列表转换为相应的有符号值?
- matlab - 如何使用带有以下名称的名称保存 .mat 文件:
- jquery - 选择和复选框计算器一直给出 NaN,除非两个选择都被勾选
- java - 如何在 Z3 Java API 中定义排序?
- python - 有人可以看到我的代码有什么问题(ARRAY 旋转)吗?
- crystal-reports - 如果属于同一组,则重复该值
- c# - 为什么在运行实体框架迁移后我只有一张表?
- python-3.x - 交互式导航窗口中的图形设置
- python - 如何正确地在 Python 中发出异步 Api 请求?
- list - List的并行处理
> 使用反应式