文件压缩与解压

来源:互联网 发布:网络翻墙 违法 编辑:程序博客网 时间:2024/05/16 10:31

Java文件ZLib压缩与解压示例:

/**   * 2009-9-9   */  package com.game.util;     import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.zip.Deflater;import java.util.zip.DeflaterOutputStream;import java.util.zip.Inflater;import java.util.zip.InflaterInputStream;import org.apache.log4j.LogManager;import org.apache.log4j.Logger;  /**   * ZLib压缩工具   *    * @version 1.0   * @since 1.0   */  public abstract class ZLibUtils {     private static Logger log = LogManager.getLogger(ZLibUtils.class);    /**       * 压缩       *        * @param data       *            待压缩数据       * @return byte[] 压缩后的数据       */      public static byte[] compress(byte[] data) {           byte[] output = new byte[0];             Deflater compresser = new Deflater();             compresser.reset();           compresser.setInput(data);           compresser.finish();           ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);           try {               byte[] buf = new byte[1024];               while (!compresser.finished()) {                   int i = compresser.deflate(buf);                   bos.write(buf, 0, i);               }               output = bos.toByteArray();           } catch (Exception e) {               output = data;               log.error(e, e);           } finally {               try {                   bos.close();               } catch (IOException e) {                   log.error(e, e);               }           }           compresser.end();           return output;       }         /**       * 压缩       *        * @param data       *            待压缩数据       *        * @param os       *            输出流       */      public static void compress(byte[] data, OutputStream os) {           DeflaterOutputStream dos = new DeflaterOutputStream(os);             try {               dos.write(data, 0, data.length);                 dos.finish();                 dos.flush();           } catch (IOException e) {               log.error(e, e);           }       }         /**       * 解压缩       *        * @param data       *            待压缩的数据       * @return byte[] 解压缩后的数据       */      public static byte[] decompress(byte[] data) {           byte[] output = new byte[0];             Inflater decompresser = new Inflater();           decompresser.reset();           decompresser.setInput(data);             ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);           try {               byte[] buf = new byte[1024];               while (!decompresser.finished()) {                   int i = decompresser.inflate(buf);                   o.write(buf, 0, i);               }               output = o.toByteArray();           } catch (Exception e) {               output = data;               log.error(e, e);           } finally {               try {                   o.close();               } catch (IOException e) {                   log.error(e, e);               }           }             decompresser.end();           return output;       }         /**       * 解压缩       *        * @param is       *            输入流       * @return byte[] 解压缩后的数据       */      public static byte[] decompress(InputStream is) {           InflaterInputStream iis = new InflaterInputStream(is);           ByteArrayOutputStream o = new ByteArrayOutputStream(1024);           try {               int i = 1024;               byte[] buf = new byte[i];                 while ((i = iis.read(buf, 0, i)) > 0) {                   o.write(buf, 0, i);               }             } catch (IOException e) {               log.error(e, e);           }           return o.toByteArray();       }   }  


0 0
原创粉丝点击