Android實(shí)現(xiàn)壓縮字符串的方法示例
前言
Android端可以對字符串進(jìn)行壓縮,我們在進(jìn)行大量簡單文本傳輸時(shí),可以先壓縮字符串再發(fā)送。接收端接收后再解壓。也可以將字符串壓縮后存入數(shù)據(jù)庫中,下面話不多說了,來一起看看詳細(xì)的介紹吧。
使用到的類庫
GZIPOutputStream
代碼示例
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class StrZipUtil {
/**
* @param input 需要壓縮的字符串
* @return 壓縮后的字符串
* @throws IOException IO
*/
public static String compress(String input) throws IOException {
if (input == null || input.length() == 0) {
return input;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzipOs = new GZIPOutputStream(out);
gzipOs.write(input.getBytes());
gzipOs.close();
return out.toString("ISO-8859-1");
}
/**
* @param zippedStr 壓縮后的字符串
* @return 解壓縮后的
* @throws IOException IO
*/
public static String uncompress(String zippedStr) throws IOException {
if (zippedStr == null || zippedStr.length() == 0) {
return zippedStr;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(zippedStr
.getBytes("ISO-8859-1"));
GZIPInputStream gzipIs = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gzipIs.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
// toString()使用平臺默認(rèn)編碼,也可以顯式的指定如toString("GBK")
return out.toString();
}
}
紅米手機(jī)測試輸出
08-09 13:16:53.388 32248-32267/com.rustfisher.ndkproj D/rustApp: 開始存入數(shù)據(jù)庫 ori1 len=304304 08-09 13:16:53.418 32248-32267/com.rustfisher.ndkproj D/rustApp: 已存入數(shù)據(jù)庫 ori1 len=304304 , 耗時(shí)約37 ms 08-09 13:16:53.418 32248-32267/com.rustfisher.ndkproj D/rustApp: 開始壓縮 ori1 len=304304 08-09 13:16:53.438 32248-32267/com.rustfisher.ndkproj D/rustApp: 壓縮完畢 zip1 len=1112 , 耗時(shí)約19 ms 08-09 13:16:53.438 32248-32267/com.rustfisher.ndkproj D/rustApp: 存壓縮后的數(shù)據(jù)進(jìn)數(shù)據(jù)庫 zip1.length=1112 08-09 13:16:53.448 32248-32267/com.rustfisher.ndkproj D/rustApp: 壓縮后的數(shù)據(jù)已進(jìn)數(shù)據(jù)庫 zip1.length=1112 , 耗時(shí)約8 ms 08-09 13:16:53.448 32248-32267/com.rustfisher.ndkproj D/rustApp: 解壓開始 08-09 13:16:53.488 32248-32267/com.rustfisher.ndkproj D/rustApp: 解壓完畢 耗時(shí)約36 ms
存儲時(shí)間受存儲字符串的長度影響。字符串長度與存儲耗時(shí)正相關(guān)。
榮耀手機(jī)測試
08-09 10:38:42.759 23075-23109/com.rustfisher D/rustApp: 開始壓縮 ori1 len=304304 08-09 10:38:42.764 23075-23109/com.rustfisher D/rustApp: 壓縮完畢 zip1 len=1112 08-09 10:38:42.764 23075-23109/com.rustfisher D/rustApp: 解壓開始 08-09 10:38:42.789 23075-23109/com.rustfisher D/rustApp: 解壓完畢
此例中,榮耀壓縮耗時(shí)約5ms,解壓耗時(shí)約25ms。
可以看出,壓縮后與原長度之比 1112/304304, 約0.365%
壓縮和解壓縮耗時(shí)視手機(jī)情況而定。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android實(shí)現(xiàn)粒子中心擴(kuò)散動畫效果
粒子動畫效果相比其他動畫來說是非常復(fù)雜了的,主要涉及三個(gè)方面,粒子初始化、粒子位移、粒子回收等問題,本篇將實(shí)現(xiàn)兩種動畫效果,代碼基本相同,只是旋轉(zhuǎn)速度不一樣,需要的朋友可以參考下2024-02-02
使用Android Studio Gradle實(shí)現(xiàn)友盟多渠道打包
這篇文章主要介紹了使用Android Studio Gradle實(shí)現(xiàn)友盟多渠道打包,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
Android實(shí)現(xiàn)本地Service方法控制音樂播放
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)本地Service方法控制音樂播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
Android實(shí)現(xiàn)新增及編輯聯(lián)系人的方法
這篇文章主要介紹了Android實(shí)現(xiàn)新增及編輯聯(lián)系人的方法,是Android應(yīng)用開發(fā)常見的功能,需要的朋友可以參考下2014-07-07
Android編程動態(tài)修改RelativeLayout寬高的方法
這篇文章主要介紹了Android編程動態(tài)修改RelativeLayout寬高的方法,涉及Android動態(tài)布局的相關(guān)技巧,需要的朋友可以參考下2015-12-12
一個(gè)Activity中多個(gè)Fragment的切換
經(jīng)常會遇到在一個(gè)activity界面上布局多個(gè)fragment,但是如何從一個(gè)fragment跳轉(zhuǎn)到另一個(gè)fragment呢?本文主要對一個(gè)Activity中多個(gè)Fragment的切換進(jìn)行介紹,下面跟著小編一起來看下吧2017-01-01

