美文网首页
Java使用GZIP进行压缩和解压缩(GZIPOutputStr

Java使用GZIP进行压缩和解压缩(GZIPOutputStr

作者: 还是那个没头脑 | 来源:发表于2021-11-03 11:16 被阅读0次

    使用GZIPOutputStream进行GZIP压缩:

    public static byte[] compress(String str, String encoding) {
            if (str == null || str.length() == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip;
            try {
                gzip = new GZIPOutputStream(out);
                gzip.write(str.getBytes(encoding));
                gzip.close();
            } catch (IOException e) {
                ApiLogger.error("gzip compress error.", e);
            }
            return out.toByteArray();
        }
    

    使用GZIPInputStream进行GZIP解压缩:

    public static byte[] uncompress(byte[] bytes) {
            if (bytes == null || bytes.length == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);
            try {
                GZIPInputStream ungzip = new GZIPInputStream(in);
                byte[] buffer = new byte[256];
                int n;
                while ((n = ungzip.read(buffer)) >= 0) {
                    out.write(buffer, 0, n);
                }
            } catch (IOException e) {
                ApiLogger.error("gzip uncompress error.", e);
            }
     
            return out.toByteArray();
        }
    

    完整代码:

    package com.example.test.util;
     
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.zip.GZIPInputStream;
    import java.util.zip.GZIPOutputStream;
     
    import org.apache.commons.codec.binary.StringUtils;
     
    import cn.sina.api.commons.util.ApiLogger;
     
    public class GZIPUtils {
     
        public static final String GZIP_ENCODE_UTF_8 = "UTF-8";
     
        public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1";
     
        /**
         * 字符串压缩为GZIP字节数组
         * 
         * @param str
         * @return
         */
        public static byte[] compress(String str) {
            return compress(str, GZIP_ENCODE_UTF_8);
        }
     
        /**
         * 字符串压缩为GZIP字节数组
         * 
         * @param str
         * @param encoding
         * @return
         */
        public static byte[] compress(String str, String encoding) {
            if (str == null || str.length() == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip;
            try {
                gzip = new GZIPOutputStream(out);
                gzip.write(str.getBytes(encoding));
                gzip.close();
            } catch (IOException e) {
                ApiLogger.error("gzip compress error.", e);
            }
            return out.toByteArray();
        }
     
        /**
         * GZIP解压缩
         * 
         * @param bytes
         * @return
         */
        public static byte[] uncompress(byte[] bytes) {
            if (bytes == null || bytes.length == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);
            try {
                GZIPInputStream ungzip = new GZIPInputStream(in);
                byte[] buffer = new byte[256];
                int n;
                while ((n = ungzip.read(buffer)) >= 0) {
                    out.write(buffer, 0, n);
                }
            } catch (IOException e) {
                ApiLogger.error("gzip uncompress error.", e);
            }
     
            return out.toByteArray();
        }
     
        /**
         * 
         * @param bytes
         * @return
         */
        public static String uncompressToString(byte[] bytes) {
            return uncompressToString(bytes, GZIP_ENCODE_UTF_8);
        }
     
        /**
         * 
         * @param bytes
         * @param encoding
         * @return
         */
        public static String uncompressToString(byte[] bytes, String encoding) {
            if (bytes == null || bytes.length == 0) {
                return null;
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);
            try {
                GZIPInputStream ungzip = new GZIPInputStream(in);
                byte[] buffer = new byte[256];
                int n;
                while ((n = ungzip.read(buffer)) >= 0) {
                    out.write(buffer, 0, n);
                }
                return out.toString(encoding);
            } catch (IOException e) {
                ApiLogger.error("gzip uncompress to string error.", e);
            }
            return null;
        }
     
        public static void main(String[] args) {
            String str ="%5B%7B%22UpdateTime%22%3A%222021-11-03+9%3A39%3A41%22%2C%22smsList%22%3A%5B%7B%22liveState%22%3A%221";
            System.out.println("原长度:" + str.length());
            System.out.println("压缩后字符串:" + GZIPUtils.compress(str).toString().length());
            System.out.println("解压缩后字符串:" + StringUtils.newStringUtf8(GZIPUtils.uncompress(GZIPUtils.compress(str))));
            System.out.println("解压缩后字符串:" + GZIPUtils.uncompressToString(GZIPUtils.compress(str)));
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Java使用GZIP进行压缩和解压缩(GZIPOutputStr

          本文链接:https://www.haomeiwen.com/subject/ijwqzltx.html