Java ZLIB流大csv文件意外结束
我正在尝试解压一个csv文件,它的格式是Java ZLIB流大csv文件意外结束,java,csv,zlib,compression,Java,Csv,Zlib,Compression,我正在尝试解压一个csv文件,它的格式是name.csv.gz,我想它有点像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
name.csv.gz
,我想它有点像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();}
这是我用来解压它的代码,在最后,我得到了错误ZLIB stream的意外结束
,并且我在文件的末尾丢失了几百万行。我还没有在谷歌上找到任何能引领我走向繁荣的方向的东西,所以非常感谢您的帮助
编辑:我忘记了顶部的一行代码(*facepalm)另外,我已经将缓冲区大小从2048增加到4096,解压后我得到了更多的行,那么我是否正确地假设我没有分配足够大的缓冲区?(或者这是一个天真的假设?)
我已经增加了缓冲区大小,从2048增加到4096,解压后我得到了更多的行,所以我假设我没有分配足够大的缓冲区是正确的吗?(或者这是一个天真的假设?)
这不是缓冲区大小的问题,而是GZIPInputStream.read()方法的问题。缓冲区大小仅声明while循环读取和写入的“频率”,从而导致更大的缓冲区=>更高的传输速率=>更少的循环
您的问题在GZIPInputStream类中,或者与使用过的文件有关,可以先尝试较小的文件。对我来说很好。可能是.gz文件有问题?你是如何创建的?这个文件是给我的,我不知道它是如何创建的……还有什么可以解压这个文件,比如
unzip
或7zip
?如果没有,您的zip文件已损坏。是否可以尝试使用普通工具将其解包,并查看是否发生任何错误?如果没有发生错误,您可以再次创建包文件并尝试itIf gunzip,如果gunzip产生相同的错误,那么问题就出在文件上。