Java Gzip 數據壓縮與解壓縮


代碼如下

public class GZIPDemo {

    public static void main(String [] args) throws IOException{
        String s ="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        //我這里用字節流輸出的,所以轉正byte[]
        byte[] b = s.getBytes();
        System.out.println("壓縮前:"+b.length);
        //緩存數據用的字節數組流
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //壓縮用的是這個流
        GZIPOutputStream gout = new GZIPOutputStream(bout);
        gout.write(b);//把b寫入到緩沖區中,也就是ByteArrayOutputStream
        gout.close();//關閉流,也就是把數據全都刷到字節數組流中
        b = bout.toByteArray();//這個字節數組流關閉之后還能用,不用擔心,從他里面把壓縮好的數據拿出來,還是放在byte[]中
        System.out.println("壓縮后:"+b.length);
        
        
        
        ByteArrayInputStream bis = new ByteArrayInputStream(b);
        GZIPInputStream gis =new GZIPInputStream(bis);
        int len = -1;
        byte [] b1 =new byte[1024];
        StringBuilder sb = new StringBuilder();
        while((len = gis.read(b1)) != -1){
            bos.write(b1, 0, len);
        }
        bos.close();
        System.out.println("解壓之后:"+bos.toByteArray().length);
        System.out.println(bos.toString());
    }

    private static void gizp2file() throws UnsupportedEncodingException,
            FileNotFoundException, IOException {
        // 做准備壓縮一個字符文件,注,這里的字符文件要是GBK編碼方式的12
          BufferedReader in = new BufferedReader(new InputStreamReader(
            new FileInputStream("d:/電腦提速.htm"), "GBK"));
          // 使用GZIPOutputStream包裝OutputStream流,使其具體壓縮特性,最后會生成test.txt.gz壓縮包
          // 並且里面有一個名為test.txt的文件
          BufferedOutputStream out = new BufferedOutputStream(
            new GZIPOutputStream(new FileOutputStream("d:/電腦提速.htm.gz")));
          
          System.out.println("開始寫壓縮文件...");
          int c;
          while ((c = in.read()) != -1) {
           /*
            * 注,這里是壓縮一個字符文件,前面是以字符流來讀的,不能直接存入c,因為c已是Unicode 
            * 碼,這樣會丟掉信息的(當然本身編碼格式就不對),所以這里要以GBK來解后再存入。
            */
           out.write(String.valueOf((char) c).getBytes("GBK"));
          }
          in.close();
          out.close();
          
          System.out.println("開始讀壓縮文件...");
          // 使用GZIPInputStream包裝InputStream流,使其具有解壓特性
          BufferedReader in2 = new BufferedReader(new InputStreamReader(
            new GZIPInputStream(new FileInputStream("d:/PrintStreamTest.java.gz")), "GBK"));
          String s;
          // 讀取壓縮文件里的內容
          while ((s = in2.readLine()) != null) {
           System.out.println(s);
          }
          in2.close();
    }
}

經測試 數據壓縮無誤;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM