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

smalldeer 2005-04-04 01:46:51
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就在模拟这个

我想问大家是怎么样处理解压/压缩字符串的问题,是不是我上面的处理方法有问题还是有更好的处理方法,谢谢大家
...全文
593 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bxh2dai 2005-04-04
  • 打赏
  • 举报
回复
请FTP高手看看这个贴,谢谢
http://community.csdn.net/Expert/topic/3907/3907236.xml?temp=.7387812
rower203 2005-04-04
  • 打赏
  • 举报
回复
纠正楼上的一个错误:

//处理2
//byte[]<->String<->byte[]
String b = new sun.misc.BASE64Encoder().encode(testbyte1);
byte[] testbyte3 = new sun.misc.BASE64Decoder().decodeBuffer(b);
~~~~~~~~~~~~
testbyte2 = unzip(testbyte3);
这样可以.
ChDw 2005-04-04
  • 打赏
  • 举报
回复
这个是因为byte[]转换成String时会遇到大量根本不可以显示的字符,这样就是错误的原由

你可以使用
String result = new sun.misc.BASE64Encoder().encode(buf);

这样可以完成避免上述问题
byte[] buf2 = new sun.misc.BASE64Decoder().encodeBuffer(result);

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧