我正在尝试解压缩格式为name.csv.gz
的csv文件,我认为它类似于600M
的压缩格式,我们将在7Gb
的背景下说些什么解压缩
byte[] buffer = new byte[4096];
try {
GZIPInputStream gzis = new GZIPInputStream(new FileInputStream("/run/media/justin/DATA/2000000033673205_53848.TEST_SCHEDULE_GCO.20180706.090850.2000000033673205.x04q13.csv.gz"));
FileOutputStream out = new FileOutputStream("/run/media/justin/DATA/unzipped.txt");
int len;
while((len = gzis.read(buffer)) > 0) {
out.write(buffer,0,len);
}
gzis.close();
out.close();
System.out.println("DONE!!");
} catch(IOException e) {e.printStackTrace();}
这是我用来解压缩的代码,最后,出现错误Unexpected end of ZLIB stream
,并且在文件末尾缺少几百万行。我在Google上找不到任何能使我朝着任何方向发展的东西,因此,我们将不胜感激!
编辑:我也忘记了顶部的代码行(* facepalm),我将缓冲区大小从2048增加到4096,并且在解压后得到的行数更多,所以我假设我是正确的只是没有分配足够大的缓冲区? (或者这是一个天真的假设?)
答案 0 :(得分:1)
我已经将缓冲区大小从2048增加到4096,并且在解压后得到的行数更多,所以我以为我只是没有分配足够大的缓冲区就可以了吗? (或者这是一个天真的假设?)
这不是您的缓冲区大小的问题,更多的是GZIPInputStream.read()方法的问题。缓冲区大小仅声明while循环应多长时间读取和写入一次,导致bigger buffer => higher transfer rate => less loops
您的问题在GZIPInputStream类内部或与使用的文件有关,也许首先尝试使用较小的文件。