• gzip工具类 支持字符串压缩解压缩


    
    import java.io.ByteArrayInputStream;  
    import java.io.ByteArrayOutputStream;  
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.IOException;
    import java.io.InputStream;  
    import java.io.OutputStream;  
    import java.util.zip.GZIPInputStream;  
    import java.util.zip.GZIPOutputStream;  
      
    /** 
     * GZIP工具 
     *  
     */  
    public abstract class GZipUtils {  
      
        public static final int BUFFER = 1024;  
        public static final String EXT = ".gz";  
        private static String encode = "utf-8";//"ISO-8859-1" 
        private static String hexStr ="0123456789ABCDEF";//全局
        /** 
         * 数据压缩 
         *  
         * @param data 
         * @return 
         * @throws IOException 
         * @throws Exception 
         */  
        public static byte[] compress(byte[] data) throws IOException {  
            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 data 
         * @return 
         * @throws IOException 
         * @throws Exception 
         */  
        public static String compressStr(String data) throws IOException { 
        	
            return BinaryToHexString(compress(data.getBytes(encode))); 
         }
        
        /** 
         * 文件压缩 
         *  
         * @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 IOException 
         * @throws Exception 
         */  
        public static void compress(InputStream is, OutputStream os) throws IOException  
                 {  
      
            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 IOException 
         * @throws Exception 
         */  
        public static String decompressStr(String data) throws IOException {     	
            return new String(decompress(HexStringToBinary(data)),encode); 
         }
        
        /** 
         * 数据解压缩 
         *  
         * @param data 
         * @return 
         * @throws IOException 
         * @throws Exception 
         */  
        public static byte[] decompress(byte[] data) throws IOException {  
            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 IOException 
         * @throws Exception 
         */  
        public static void decompress(InputStream is, OutputStream os) throws IOException  
                 {  
      
            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 String BinaryToHexString(byte[] bytes){   
                
             String result = "";   
             String hex = "";   
             for(int i=0;i<bytes.length;i++){   
                 //字节高4位   
                 hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));
                 //字节低4位   
                hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));  
                 result +=hex;   
             }   
             return result;   
         }   
         /**  
          *   
          * @param hexString  
          * @return 将十六进制转换为字节数组  
          */  
         public static byte[] HexStringToBinary(String hexString){   
             //hexString的长度对2取整,作为bytes的长度   
             int len = hexString.length()/2;   
             byte[] bytes = new byte[len];   
             byte high = 0;//字节高四位   
             byte low = 0;//字节低四位   
       
             for(int i=0;i<len;i++){   
                  //右移四位得到高位   
                  high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);   
                  low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));   
                  bytes[i] = (byte) (high|low);//高地位做或运算   
             }   
             return bytes;   
         }  
     
    
    }  
    
    
    


  • 相关阅读:
    农村养殖业什么最赚钱?什么养殖项目行情好?
    加盟店可靠吗?如何识破加盟骗局?
    开小店做什么生意好?开小店需要营业执照吗?
    投资小的项目有哪些?投资小项目推荐
    贪心
    关于:Express会被Koa2取代吗?
    关于:Express会被Koa2取代吗?
    关于:Express会被Koa2取代吗?
    关于:Express会被Koa2取代吗?
    剑指offer
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317730.html
Copyright © 2020-2023  润新知