谷哥架构笔记 2009-01-12 10:55
浏览 447
已采纳

关于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条回答 默认 最新

  • bohemia 2009-01-12 11:27
    关注

    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);
    }
    我这样试了试,是可以的;
    你是怎么读取的?

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证