关于java的GZip解压问题

视频系统,关系各终端的播放日志,采用的是定期向服务器上传tar.gz包,然后在服务器上解开,逐条读取放到数据库中。
问题:以前服务器用的是linux系统,解压文件是调用的系统命令tar来解压的,现在因为部分系统要部署到window或苹果上,所以改为用java自己的包来解压。这下出问题了,本来只有三行的记录,解出来之后有四行,第一行的前面是文件名和系统中的很多信息,然后是文件内容,中间隔的是乱码,下载到windows上用文本编辑器打到,,好像中间隔的是空格,用客户端软件ssh到linux上,用vi看,是一个个类似^@样的乱码,然而用正则表达式匹配却不行。
实际数据:
一个tar包,里面是一个log文件,内容是:
\factory\film\真实的谎言\huangyan.vob,2000-01-01 20:43:32,2000-01-01 20:43:39
\factory\film\指环王\zhihuanwang.vob,2000-01-01 22:50:24,2000-01-01 22:50:29
用系统命令的方法,一切正常,但是用GZip的包来解,内容就是这样的:
00e04c0000ba_2001-03-06.log 0100755 0000000 0000000 00000003036 07251305477 013102\factory\film\真实的谎言\huangyan.vob,2000-01-01 20:43:32,2000-01-01 20:43:39
\factory\film\指环王\zhihuanwang.vob,2000-01-01 22:50:24,2000-01-01 22:50:29
真实文件的前面,是文件名以及后面很多不知道是什么信息的信息,最后还有一行,我想用拷贝粘贴的方法,但是粘不出来,不知道为什么。
请问是不是GZIPInputStream或GZIPOutputStream有什么参数?为什么他们解压后有这么多冗余的数据?如何去掉?
谢谢!不好意思,就这点分了
[b]问题补充:[/b]
这是文件,如果能用Gzip解压后的文件与用winzip 或winrar解压后的文件一致,就说明正确了
[b]问题补充:[/b]
文件后缀名为tgz,请修改修改成tgz,当然压缩算法是一样的,我上传文件不行,只能改为gz才能上传成功
[b]问题补充:[/b]
有的朋友说格式不对,但是为什么用winrar或linux的系统命令解压之后的文件内容正常,但是用java的gzip包却多出了很多内容?这是为什么?至少应该结果相同吧?
[b]问题补充:[/b]
用客户端工具压缩之后,再用gzip的包解压,网上的大多程序都能做到正确解压,我得到的是数字电视的机顶盒所上传的日志文件,因为是不同公司之后开发的,所以很难联调,也不清楚具体是用什么压缩的,应该是用linux的命令压缩的
[b]问题补充:[/b]
[color=red]因为我上传的文件格式不支持,所以我是修改了后缀名才上传成功的,下载后请修改成为*.tgz,而不是gz[/color]
[b]问题补充:[/b]
[color=red]根据后缀名来判断,并不是bz2压缩,也许是在包中含了别的信息,但是有一点很奇怪:为什么用系统命令解压或用工具解压,都没有这些信息呢?为什么用GZip还解压,就会有呢?这是为什么?[/color]

8个回答

String fileName = "gzip.file.gz";
BufferedReader gzipReader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(fileName))));
String tmp = null;
while((tmp=gzipReader.readLine())!=null){
System.out.println("文件行:"+tmp);
}
我这样试了试,是可以的;
你是怎么读取的?

难道跟服务器的编码有关?

在Linux和Windows进行文件传输有两种方式ASCII和Binary方式。在进行传输时,用ASCII方式可能进行字符转换,而二进制不会。建议传输时,设置Mode为Binary。
在java里面要用Data流,不要用字符流(Reader的不要)。

好像报格式不对;
我用7zip压缩的gz,可以直接读;不知道什么原因.

客户端压缩完成后,你Java解压试试看;
也许真的是上传没用BInary方式传递的原因;

估计是压缩的文件,添加了某些标识.

[quote]用客户端工具压缩之后,再用gzip的包解压,网上的大多程序都能做到正确解压,我得到的是数字电视的机顶盒所上传的日志文件,因为是不同公司之后开发的,所以很难联调,也不清楚具体是用什么压缩的,应该是用linux的命令压缩的 [/quote]
Linux上还有bz2压缩标准,比gzip压缩效率高,看看是不是这样的?

tgz? 不是gz?

难道是因为tar的原因;

tgz分两步:tar & gzip;
gz只有一步:gzip;
我怀疑用java解压后是tar包。在windows上用mingw或者cygwin的tar命令解压看看。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问