CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

[请教]字符串压缩的问题:出错java.util.zip.ZipException: missing entry name

楼主smalldeer(晓露)2005-04-04 13:46:51 在 Java / J2EE / EJB / JMS 提问

package   gov.nblt.taxcore.servletservice.compress;  
   
  import   java.io.IOException;  
  import   java.io.ByteArrayOutputStream;  
  import   java.util.zip.ZipEntry;  
  import   java.util.zip.ZipOutputStream;  
  import   java.io.ByteArrayInputStream;  
  import   java.util.zip.ZipInputStream;  
   
  public   class   CompressTest   {  
      public   CompressTest()   {  
      }  
   
      public   static   void   main(String[]   args)  
              throws   IOException   {  
          String   a   =   "compressString";  
          byte[]   abyte   =   a.getBytes();  
          byte[]   testbyte1   =   null;  
          byte[]   testbyte2   =   null;  
          testbyte1   =   zip(abyte);  
   
          //处理1  
          testbyte2   =   unzip(testbyte1);  
   
          //处理2  
          //byte[]<->String<->byte[]  
          //String   b   =   new   String(testbyte1);  
          //byte[]   testbyte3   =   b.getBytes();  
          //testbyte2   =   unzip(testbyte3);  
   
          System.out.println(new   String(testbyte2));  
   
      }  
   
      public   static   byte[]   unzip(byte[]   zipBytes)  
              throws   IOException   {  
          ByteArrayInputStream   bais   =   new   ByteArrayInputStream(zipBytes);  
          String   entryName   =   new   String("servletservice");  
          ZipInputStream   zis   =   new   ZipInputStream(bais);  
          zis.getNextEntry();  
          ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream();  
          final   int   BUFSIZ   =   4096;  
          byte   inbuf[]   =   new   byte[BUFSIZ];  
          int   n;  
          while   (   (n   =   zis.read(inbuf,   0,   BUFSIZ))   !=   -1)   {  
              baos.write(inbuf,   0,   n);  
          }  
          byte[]   data   =   baos.toByteArray();  
          zis.close();  
          return   data;  
      }  
   
      public   static   byte[]   zip(byte[]   data)  
              throws   IOException   {  
          ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream();  
          ZipEntry   ze   =   new   ZipEntry("servletservice");  
          ZipOutputStream   zos   =   new   ZipOutputStream(baos);  
          zos.putNextEntry(ze);  
          zos.write(data,   0,   data.length);  
          zos.close();  
          byte[]   zipBytes   =   baos.toByteArray();  
          return   zipBytes;  
      }  
   
  }  
   
  -------------------------------------------------------  
  按“处理1”   ,执行是ok的  
   
  现在想经过byte[]<->String<->byte[]的转换处理后,在进行解压缩  
  按“处理2”,执行的时候就会出错  
   
  很奇怪,为什么经过byte[]<->String<->byte[]的转换处理就不行了呢?  
   
  -------------------------------------------------------  
   
  其实是解决这样的问题:  
  客户端上传参数字符串(经过压缩的,zip压缩)到服务器端,服务器接受参数(自然首先是要解压),上面这个test就在模拟这个  
   
  我想问大家是怎么样处理解压/压缩字符串的问题,是不是我上面的处理方法有问题还是有更好的处理方法,谢谢大家  
  问题点数:100、回复次数:3Top

1 楼ChDw(米)回复于 2005-04-04 13:53:33 得分 50

这个是因为byte[]转换成String时会遇到大量根本不可以显示的字符,这样就是错误的原由  
   
  你可以使用  
  String   result   =   new   sun.misc.BASE64Encoder().encode(buf);  
   
  这样可以完成避免上述问题  
  byte[]   buf2   =   new   sun.misc.BASE64Decoder().encodeBuffer(result);  
  Top

2 楼rower203(华仔)回复于 2005-04-04 14:10:38 得分 50

纠正楼上的一个错误:  
   
          //处理2  
          //byte[]<->String<->byte[]  
          String   b   =   new   sun.misc.BASE64Encoder().encode(testbyte1);  
          byte[]   testbyte3   =   new   sun.misc.BASE64Decoder().decodeBuffer(b);  
                                                                                                          ~~~~~~~~~~~~  
          testbyte2   =   unzip(testbyte3);  
  这样可以.Top

3 楼bxh2dai(希望明天会有些改变)回复于 2005-04-04 15:21:50 得分 0

请FTP高手看看这个贴,谢谢  
  http://community.csdn.net/Expert/topic/3907/3907236.xml?temp=.7387812Top

相关问题

  • 很郁闷,字符串操作出错
  • *** PostMessage 传递字符串,delete时出错 ----请关注***
  • 为什么连接字符串出错,急急急!
  • dll中,实现对话框,导出字符串时出错。
  • 求救:解释xml格式字符串出错
  • 见鬼,字符串常量就OK,变量就出错
  • #####将含有"$"字符串的内容写入文件出错
  • 字符串比较函数调用出错,补救!
  • vb 调用 VC 编译成功的 DLL 字符串处理函数出错
  • 为什么我这样去掉字符串的空格会出错?

关键词

  • zip
  • 转换
  • sun
  • testbyte
  • 字符串
  • 压缩
  • servletservice
  • baos
  • bytearrayoutputstream
  • 处理

得分解答快速导航

  • 帖主:smalldeer
  • ChDw
  • rower203

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo