A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 adamjy 于 2014-4-22 12:40 编辑

通过java原生API将字符串进行压缩和解压缩,报异常了(Unexpected end of ZLIB input stream)。
在解压缩函数的gunzip.read(buffer)出了问题,跟踪进去看,异常由InflaterInputStream类的fill函数抛出。
InflaterInputStream类的fill()方法代码如下,
  1. protected void fill() throws IOException {
  2.     ensureOpen();
  3.     len = in.read(buf, 0, buf.length);
  4.     if (len == -1) {
  5.        throw new EOFException("Unexpected end of ZLIB input stream");
  6.     }
  7.     inf.setInput(buf, 0, len);
  8. }
复制代码


压缩解压缩代码如下,
  1. public static String GetDeCompress(String src)
  2. {
  3.     if (src == null || src.isEmpty()) {
  4.         return src;
  5.     }
  6.     ByteArrayOutputStream out = new ByteArrayOutputStream();
  7.     GZIPInputStream gunzip = null;
  8.     String des = null;
  9.     try {
  10.         ByteArrayInputStream in = new ByteArrayInputStream(
  11.                 new BASE64Decoder().decodeBuffer(src));
  12.         gunzip = new GZIPInputStream(in);
  13.         byte[] buffer = new byte[1024];
  14.         int n;
  15.         n = gunzip.read(buffer);
  16.         while ((n = gunzip.read(buffer)) >= 0) {
  17.             out.write(buffer, 0, n);
  18.         }
  19.         des = out.toString();
  20.     } catch (IOException e) {
  21.         e.printStackTrace();
  22.     }finally{
  23.         if(gunzip!=null)
  24.         {
  25.             try {
  26.                 gunzip.close();
  27.             } catch (IOException e) {
  28.                 e.printStackTrace();
  29.             }
  30.         }
  31.     }
  32.     return des;
  33. }
复制代码

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马