gzip算法java实现

来源:互联网 发布:新田源码 编辑:程序博客网 时间:2024/05/29 07:00

转自:http://snowolf.iteye.com/blog/643010

 

GZIP常常用在linxu环境下,是一种非常简单的压缩算法。在Java实现API中,它仅仅包含两个实现类:GZIPInputStream和GZIPOutputStream。
GZIPOutputStream类用于压缩
GZIPInputStream类用于解压缩

 

完整代码如下

 

 

 

 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.zip.GZIPInputStream;

import java.util.zip.GZIPOutputStream;

 

/**

 * GZIP工具

 *

 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>

 * @since 1.0

 */

public abstract class GZipUtils {

 

    public static final int BUFFER = 1024;

    public static final String EXT = ".gz";

 

    /**

     * 数据压缩

     *

     * @param data

     * @return

     * @throws Exception

     */

    public static byte[] compress(byte[] data) throws Exception {

       ByteArrayInputStream bais = new ByteArrayInputStream(data);

       ByteArrayOutputStream baos = new ByteArrayOutputStream();

 

       // 压缩

       compress(bais, baos);

 

       byte[] output = baos.toByteArray();

 

       baos.flush();

       baos.close();

 

       bais.close();

 

       return output;

    }

 

    /**

     * 文件压缩

     *

     * @param file

     * @throws Exception

     */

    public static void compress(File file) throws Exception {

       compress(file, true);

    }

 

    /**

     * 文件压缩

     *

     * @param file

     * @param delete

     *            是否删除原始文件

     * @throws Exception

     */

    public static void compress(File file, boolean delete) throws Exception {

       FileInputStream fis = new FileInputStream(file);

       FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);

 

       compress(fis, fos);

 

       fis.close();

       fos.flush();

       fos.close();

 

       if (delete) {

           file.delete();

       }

    }

 

    /**

     * 数据压缩

     *

     * @param is

     * @param os

     * @throws Exception

     */

    public static void compress(InputStream is, OutputStream os)

           throws Exception {

 

       GZIPOutputStream gos = new GZIPOutputStream(os);

 

       int count;

       byte data[] = new byte[BUFFER];

       while ((count = is.read(data, 0, BUFFER)) != -1) {

           gos.write(data, 0, count);

       }

 

       gos.finish();

 

       gos.flush();

       gos.close();

    }

 

    /**

     * 文件压缩

     *

     * @param path

     * @throws Exception

     */

    public static void compress(String path) throws Exception {

       compress(path, true);

    }

 

    /**

     * 文件压缩

     *

     * @param path

     * @param delete

     *            是否删除原始文件

     * @throws Exception

     */

    public static void compress(String path, boolean delete) throws Exception {

       File file = new File(path);

       compress(file, delete);

    }

 

    /**

     * 数据解压缩

     *

     * @param data

     * @return

     * @throws Exception

     */

    public static byte[] decompress(byte[] data) throws Exception {

       ByteArrayInputStream bais = new ByteArrayInputStream(data);

       ByteArrayOutputStream baos = new ByteArrayOutputStream();

 

       // 解压缩

 

       decompress(bais, baos);

 

       data = baos.toByteArray();

 

       baos.flush();

       baos.close();

 

       bais.close();

 

       return data;

    }

 

    /**

     * 文件解压缩

     *

     * @param file

     * @throws Exception

     */

    public static void decompress(File file) throws Exception {

       decompress(file, true);

    }

 

    /**

     * 文件解压缩

     *

     * @param file

     * @param delete

     *            是否删除原始文件

     * @throws Exception

     */

    public static void decompress(File file, boolean delete) throws Exception {

       FileInputStream fis = new FileInputStream(file);

       FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT,

              ""));

       decompress(fis, fos);

       fis.close();

       fos.flush();

       fos.close();

 

       if (delete) {

           file.delete();

       }

    }

 

    /**

     * 数据解压缩

     *

     * @param is

     * @param os

     * @throws Exception

     */

    public static void decompress(InputStream is, OutputStream os)

           throws Exception {

 

       GZIPInputStream gis = new GZIPInputStream(is);

 

       int count;

       byte data[] = new byte[BUFFER];

       while ((count = gis.read(data, 0, BUFFER)) != -1) {

           os.write(data, 0, count);

       }

 

       gis.close();

    }

 

    /**

     * 文件解压缩

     *

     * @param path

     * @throws Exception

     */

    public static void decompress(String path) throws Exception {

       decompress(path, true);

    }

 

    /**

     * 文件解压缩

     *

     * @param path

     * @param delete

     *            是否删除原始文件

     * @throws Exception

     */

    public static void decompress(String path, boolean delete) throws Exception {

       File file = new File(path);

       decompress(file, delete);

    }

   

    public static void main(String[] args) throws Exception {

       String mobiles = "12345678900,";

      

       for(int i = 0; i < 100; i++){

           mobiles += "12345678900,";

       }

      

       byte[] yasuoqian = mobiles.getBytes();

       System.out.println("压缩前 = " + yasuoqian.length);

      

       byte[] yasuohou = compress(yasuoqian);

       System.out.println("压缩后 = " + yasuohou.length);

      

       System.out.println("" + new String(decompress(yasuohou)));

    }

 

}

 

 

原创粉丝点击