首頁 > 軟體

android中gzip資料壓縮與網路框架解壓縮

2022-11-09 14:02:26

theme: smartblue

gzip是一種常用的壓縮演演算法,它是若干種檔案壓縮程式的簡稱,通常指GNU計劃的實現,此處的gzip代表GNU zip。

HTTP協定上的GZIP編碼是一種用來改進WEB應用程式效能的技術。大流量的WEB站點常常使用GZIP壓縮技術來讓使用者感受更快的速度。

開GZIP有什麼好處?

Gzip開啟以後會將輸出到使用者瀏覽器的資料進行壓縮的處理,這樣就會減小通過網路傳輸的資料量,提高瀏覽的速度。

Java中gzip壓縮和解壓實現

位元組流壓縮:

    /**
     * 位元組流gzip壓縮
     * @param data
     * @return
     */
    public static byte[] gZip(byte[] data) {
        byte[] b = null;
        try {
            ByteArrayInputStream in = new ByteArrayInputStream(data);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip = new GZIPOutputStream(out);
            byte[] buffer = new byte[4096];
            int n = 0;
            while((n = in.read(buffer, 0, buffer.length)) > 0){
                gzip.write(buffer, 0, n);
            }
            gzip.close();
            in.close();
            b = out.toByteArray();
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return b;
    }

位元組流解壓:

    /**
     * gzip解壓
     * @param data
     * @return
     */
    public static byte[] unGZip(byte[] data){
        // 建立一個新的輸出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            ByteArrayInputStream in = new ByteArrayInputStream(data);
            GZIPInputStream gzip = new GZIPInputStream(in);
            byte[] buffer = new byte[4096];
            int n = 0;
            // 將解壓後的資料寫入輸出流
            while ((n = gzip.read(buffer)) >= 0) {
                out.write(buffer, 0, n);
            }
            in.close();
            gzip.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return out.toByteArray();
    }

網路框架解壓縮(gzip)

一、採用記憶體資料庫儲存記錄。

二、請求時採用重新開新執行緒方式,在子執行緒中請求網路請求。

三、資料請求後,可通過EventBus來設定返回結果的引數和返回資訊,若其它類需要獲取狀態時,需要自己註冊監聽,動態去獲取返回值。

使用場景:應用程式內各元件間、元件與後臺執行緒間的通訊。

比如請求網路,等網路返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通訊,這些需求都可以通過EventBus實現。

使用步驟:

​
1. 新增依賴:implementation 'org.greenrobot:eventbus:3.0.0'
​
2. 註冊:EventBus.getDefault().register(this);
​

構造訊息傳送類(post呼叫的物件)

public class Student {
private String name;
private int age;
​
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}

釋出訊息

EventBus.getDefault().post(new Student("劉哈哈", 27));

接收訊息:可以有四種執行緒模型選擇

//接收事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void studentEventBus(Student student){
mShow.setText("姓名:"+student.getName()+" "+"年齡:"+student.getAge());
}

解註冊(防止記憶體漏失):EventBus.getDefault().unregister(this);

網路請求成功後,需要注意檔案流的大小,太大容易下載緩慢,解決緩慢問題

1、JSON返回格式,儘量去KEY,將JSONOBJECT修改為JSONArray格式。

2、對資料進行壓縮,採用GZIP對資料進行壓縮處理:網路請求時伺服器對資料壓縮,行動端請求到結果後,再進行解壓。

文末

在網路傳輸中我們一般都會開啟GZIP壓縮,但是出於刨根問底的天性僅僅知道如何開啟就不能滿足俺的好奇心的,所以想著寫個demo測試一下比較常用的兩個資料壓縮方式,GZIP/ZIP壓縮。

GZIP是網站壓縮加速的一種技術,對於開啟後可以加快我們網站的開啟速度,原理是經過伺服器壓縮,使用者端瀏覽器快速解壓的原理,可以大大減少了網站的流量。

以上就是android中gzip資料壓縮與網路框架解壓縮的詳細內容,更多關於android gzip資料壓縮解壓縮的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com