你的位置:首页 > Java教程

[Java教程]JAVA中的deflate压缩实现


在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,JAVA中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLATE算法的压缩功能,以下是自已编写的压缩和解压缩实现,并以压缩文件内容为例说明,其中涉及的具体方法可查看JDK的API了解说明。

 1   /** 2    *  3    * @param inputByte 4    *      待解压缩的字节数组 5    * @return 解压缩后的字节数组 6    * @throws IOException 7   */ 8   public static byte[] uncompress(byte[] inputByte) throws IOException { 9     int len = 0;10     Inflater infl = new Inflater();11     infl.setInput(inputByte);12     ByteArrayOutputStream bos = new ByteArrayOutputStream();13     byte[] outByte = new byte[1024];14     try {15       while (!infl.finished()) {16         // 解压缩并将解压缩后的内容输出到字节输出流bos中17         len = infl.inflate(outByte);18         if (len == 0) {19           break;20         }21         bos.write(outByte, 0, len);22       }23       infl.end();24     } catch (Exception e) {25       //26     } finally {27       bos.close();28     }29     return bos.toByteArray();30   }31 32   /**33    * 压缩.34    * 35    * @param inputByte36    *      待压缩的字节数组37    * @return 压缩后的数据38    * @throws IOException39   */40   public static byte[] compress(byte[] inputByte) throws IOException {41     int len = 0;42     Deflater defl = new Deflater();43     defl.setInput(inputByte);44     defl.finish();45     ByteArrayOutputStream bos = new ByteArrayOutputStream();46     byte[] outputByte = new byte[1024];47     try {48       while (!defl.finished()) {49         // 压缩并将压缩后的内容输出到字节输出流bos中50         len = defl.deflate(outputByte);51         bos.write(outputByte, 0, len);52       }53       defl.end();54     } finally {55       bos.close();56     }57     return bos.toByteArray();58   }59 60   public static void main(String[] args) {61     try {62       FileInputStream fis = new FileInputStream("D:\\testdeflate.txt");63       int len = fis.available();64       byte[] b = new byte[len];65       fis.read(b);66       byte[] bd = compress(b);67       // 为了压缩后的内容能够在网络上传输,一般采用Base64编码68       String encodestr = Base64.encodeBase64String(bd);69       byte[] bi = uncompress(Base64.decodeBase64(encodestr));70       FileOutputStream fos = new FileOutputStream("D:\\testinflate.txt");71       fos.write(bi);72       fos.flush();73       fos.close();74       fis.close();75     } catch (Exception e) {76       //77     }78   }