序列化資料傳輸壓縮
1.名詞解釋
1.1序列化
序列化的資料傳輸時以一定格式傳輸
例:
struct data{
int64 data1;
int64 data2;
char data3[25];
}
但傳輸的資料實際上data1和data2大部分資料都是非常小的,只有極少數的資料會用到64位資料來進行儲存,這種時候本部落格的傳輸壓縮演算法就有用武之地。
1.2 1248碼:
在表示十進位制數時計算機除了二進位制編碼之外還有一種編碼方式叫做1248碼,其用4位二進位制數表示一位10進位制數。使用的地方例如高考的答題卡的塗寫中。
舉個例子
十進位制數255
對應的1248碼的二進位制的16進製表示就為:
0x0255
對應的機器二進位制碼的表示方法就為:
0xff
2.本演算法的思路:
將大量的不需要用1248編碼的資料放在序列化的資料的頭地址,將需要1248碼編碼的資料放在後半部分。利用1248碼所不能表示的10,11,12,13,14,15將資料分割,從而使資料變長去掉資料中大量不必要的0.
3.壓縮演算法:
雖然二進位制的序列化的資料儲存所需要的位數相對少一點,但是在序列化的時候,已經規定了資料所需的位數為64位。所以不論資料大小傳輸的時候都使用了64位來進行傳輸。大大的耗費了網路資源
壓縮演算法即先將資料轉化為BCD編碼後,在每一個資料的結尾利用1248碼所不能表示的10,11,12,13,14,15來進行分割資料。
拿開始定義的data結構體來說事:
例如傳輸這麼一個資料
data* a=(data*)malloc(sizeof(data));
data->data1=255;
data->data2=255;
data->data3="djwadja"
其所需傳輸的位數為64+64+25位。
而壓縮演算法傳輸的資料則為:
char[25]+0x255f255f
其傳輸的位數為25+64位。這樣就可以大大減少0所佔的位數。
4.使用此壓縮演算法的界線
對於64位的1248碼所能表示的最大數為10^16,但因為其中有4位的分割符,所以所能表示的最大數為10^15
即當結構體中的某一個屬性值有大量超過了10^15的數時,則此屬性建議放入序列化中,不使用此壓縮演算法。
相關文章
- 資料壓縮傳輸與斷點續傳那些事兒斷點
- HttpGzipModule 網頁壓縮傳輸HTTP網頁
- HttpGzipStaticModule Nginx壓縮傳輸HTTPNginx
- 短影片開發app,利用資料壓縮加速大檔案傳輸APP
- 探索HTTP傳輸中gzip壓縮的祕密HTTP
- Oracle資料壓縮Oracle
- windows傳輸至linux的壓縮--分包與解包WindowsLinux
- Oracle壓縮黑科技(二)—壓縮資料的修改Oracle
- Teradata資料壓縮
- 怎麼把資料夾變成壓縮包傳送
- 請問:如何壓縮圖片,以在網路上傳輸??
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- 資料壓縮簡史 (轉)
- 傳輸體積下降 85%,融雲 HTTP 壓縮演算法解析HTTP演算法
- Android 端 WebP 圖片壓縮與傳輸的一點探索AndroidWeb
- linux 下壓縮與解壓資料夾Linux
- Java實現壓縮資料夾Java
- 資料庫壓縮技術探索資料庫
- 利用 canvas 實現資料壓縮Canvas
- js上傳圖片壓縮JS
- 怎麼把資料夾壓縮成壓縮包發給微信好友
- 11g 資料庫rman壓縮備份壓縮率測試資料庫
- 0910 – iPaste 搞定資料壓縮AST
- Windows的壓縮資料夾(zip/cab)Windows
- 在ASP中壓縮ACCESS資料庫資料庫
- oracle 靜態資料壓縮分離Oracle
- Delphi資料壓縮處理(1) (轉)
- Delphi資料壓縮處理(2) (轉)
- Hadoop(十九)MapReduce OutputFormat 資料壓縮HadoopORM
- 前端圖片壓縮及上傳前端
- java 壓縮(解壓)檔案或者資料夾工具類Java
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- iOS資料傳輸工具iOS
- JAVA壓縮和解壓縮Java
- zip壓縮和解壓縮
- 關於印度跨境資料傳輸,印度放寬了跨境資料傳輸
- Linux加密壓縮檔案/資料夾Linux加密
- Redis底層資料結構——壓縮列表Redis資料結構