欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮

 更新時(shí)間:2022年11月08日 10:08:19   作者:Coolbreeze  
這篇文章主要為大家介紹了android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

theme: smartblue

gzip是一種常用的壓縮算法,它是若干種文件壓縮程序的簡稱,通常指GNU計(jì)劃的實(shí)現(xiàn),此處的gzip代表GNU zip。

HTTP協(xié)議上的GZIP編碼是一種用來改進(jìn)WEB應(yīng)用程序性能的技術(shù)。大流量的WEB站點(diǎn)常常使用GZIP壓縮技術(shù)來讓用戶感受更快的速度。

開GZIP有什么好處?

Gzip開啟以后會(huì)將輸出到用戶瀏覽器的數(shù)據(jù)進(jìn)行壓縮的處理,這樣就會(huì)減小通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,提高瀏覽的速度。

Java中g(shù)zip壓縮和解壓實(shí)現(xiàn)

字節(jié)流壓縮:

    /**
     * 字節(jié)流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;
    }

字節(jié)流解壓:

    /**
     * gzip解壓
     * @param data
     * @return
     */
    public static byte[] unGZip(byte[] data){
        // 創(chuàng)建一個(gè)新的輸出流
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            ByteArrayInputStream in = new ByteArrayInputStream(data);
            GZIPInputStream gzip = new GZIPInputStream(in);
            byte[] buffer = new byte[4096];
            int n = 0;
            // 將解壓后的數(shù)據(jù)寫入輸出流
            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();
    }

網(wǎng)絡(luò)框架解壓縮(gzip)

一、采用內(nèi)存數(shù)據(jù)庫保存記錄。

二、請(qǐng)求時(shí)采用重新開新線程方式,在子線程中請(qǐng)求網(wǎng)絡(luò)請(qǐng)求。

三、數(shù)據(jù)請(qǐng)求后,可通過EventBus來設(shè)置返回結(jié)果的參數(shù)和返回信息,若其它類需要獲取狀態(tài)時(shí),需要自己注冊(cè)監(jiān)聽,動(dòng)態(tài)去獲取返回值。

使用場(chǎng)景:應(yīng)用程序內(nèi)各組件間、組件與后臺(tái)線程間的通信。

比如請(qǐng)求網(wǎng)絡(luò),等網(wǎng)絡(luò)返回時(shí)通過Handler或Broadcast通知UI,兩個(gè)Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實(shí)現(xiàn)。

使用步驟:

?
\1. 添加依賴:implementation 'org.greenrobot:eventbus:3.0.0'
?
\2. 注冊(cè):EventBus.getDefault().register(this);
?

構(gòu)造消息發(fā)送類(post調(diào)用的對(duì)象)

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;
}
}

發(fā)布消息

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

接收消息:可以有四種線程模型選擇

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

解注冊(cè)(防止內(nèi)存泄漏):EventBus.getDefault().unregister(this);

網(wǎng)絡(luò)請(qǐng)求成功后,需要注意文件流的大小,太大容易下載緩慢,解決緩慢問題

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

2、對(duì)數(shù)據(jù)進(jìn)行壓縮,采用GZIP對(duì)數(shù)據(jù)進(jìn)行壓縮處理:網(wǎng)絡(luò)請(qǐng)求時(shí)服務(wù)器對(duì)數(shù)據(jù)壓縮,移動(dòng)端請(qǐng)求到結(jié)果后,再進(jìn)行解壓。

文末

在網(wǎng)絡(luò)傳輸中我們一般都會(huì)開啟GZIP壓縮,但是出于刨根問底的天性僅僅知道如何開啟就不能滿足俺的好奇心的,所以想著寫個(gè)demo測(cè)試一下比較常用的兩個(gè)數(shù)據(jù)壓縮方式,GZIP/ZIP壓縮。

GZIP是網(wǎng)站壓縮加速的一種技術(shù),對(duì)于開啟后可以加快我們網(wǎng)站的打開速度,原理是經(jīng)過服務(wù)器壓縮,客戶端瀏覽器快速解壓的原理,可以大大減少了網(wǎng)站的流量。

以上就是android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮的詳細(xì)內(nèi)容,更多關(guān)于android gzip數(shù)據(jù)壓縮解壓縮的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android通過手機(jī)拍照或從本地相冊(cè)選取圖片設(shè)置頭像

    Android通過手機(jī)拍照或從本地相冊(cè)選取圖片設(shè)置頭像

    微信、QQ、微博等社交類APP如何更換自己的頭像,這篇文章主要介紹了Android通過手機(jī)拍照或從本地相冊(cè)選取圖片設(shè)置頭像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android布局之RelativeLayout相對(duì)布局

    Android布局之RelativeLayout相對(duì)布局

    RelativeLayout是相對(duì)布局控件:以控件之間相對(duì)位置或相對(duì)父容器位置進(jìn)行排列,下面通過本文給大家介紹Android布局之RelativeLayout相對(duì)布局,涉及到android relativelayout相對(duì)布局相關(guān)知識(shí),對(duì)android relativelayout相對(duì)布局相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android自定義View事件分發(fā)流程詳解

    Android自定義View事件分發(fā)流程詳解

    這篇文章主要為大家介紹了Android自定義View事件分發(fā)流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Android 獲取屏幕的多種寬高信息的示例代碼

    Android 獲取屏幕的多種寬高信息的示例代碼

    本篇文章主要介紹了Android 獲取屏幕的多種寬高信息的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • Android 獲取屏幕高度,標(biāo)題高度,狀態(tài)欄高度(實(shí)例代碼)

    Android 獲取屏幕高度,標(biāo)題高度,狀態(tài)欄高度(實(shí)例代碼)

    getWindow().findViewById(Window.ID_ANDROID_CONTENT)這個(gè)方法獲取到的view就是程序不包括標(biāo)題欄的部分,然后就可以知道標(biāo)題欄的高度了
    2013-11-11
  • Android繪制雙折線圖的方法

    Android繪制雙折線圖的方法

    這篇文章主要為大家詳細(xì)介紹了Android繪制雙折線圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • android檢測(cè)網(wǎng)絡(luò)連接狀態(tài)示例講解

    android檢測(cè)網(wǎng)絡(luò)連接狀態(tài)示例講解

    網(wǎng)絡(luò)的時(shí)候,并不是每次都能連接到網(wǎng)絡(luò),因此在程序啟動(dòng)中需要對(duì)網(wǎng)絡(luò)的狀態(tài)進(jìn)行判斷,如果沒有網(wǎng)絡(luò)則提醒用戶進(jìn)行設(shè)置
    2014-02-02
  • Android 自定義View手寫簽名并保存圖片功能

    Android 自定義View手寫簽名并保存圖片功能

    這篇文章主要介紹了Android 自定義View手寫簽名并保存圖片功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2020-03-03
  • Android中ViewPager你所不知道的優(yōu)化技巧分享

    Android中ViewPager你所不知道的優(yōu)化技巧分享

    提到ViewPager想必各位同學(xué)一點(diǎn)都不陌生,它是Android中最常用的組件之一,這篇文章小編就帶大家一起來看看ViewPager一些新的優(yōu)化方式吧
    2024-04-04
  • Android中findViewById獲取控件返回為空問題怎么解決

    Android中findViewById獲取控件返回為空問題怎么解決

    這篇文章主要介紹了Android中findViewById獲取控件返回為空問題怎么解決的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06

最新評(píng)論