精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ZIP 也能邊下載邊解壓?流式解壓技術揭秘!

開發 開發工具
對于一個 ZIP 文件,由于標準的解壓方式總是從讀取文件的末尾開始的,因此必須下載完整個 ZIP 解壓后才能訪問。

 ????對于一個 ZIP 文件,由于標準的解壓方式總是從讀取文件的末尾開始的,因此必須下載完整個 ZIP 解壓后才能訪問。當用戶通過網絡訪問 ZIP 文件時,下載解壓所帶來的耗時將大大降低用戶體驗。那么能不能邊下載邊解壓呢?阿里巴巴文娛技術 喻遠將介紹 ZIP 流式解壓的原理和技術實現路徑。

打開網絡上的 ZIP 文件需要幾步?下載,解壓,拿到所有文件。面對一個 ZIP,能不能「邊下邊播」、「按需下載」?

今年 6 月,優酷繪本技術團隊開發出新的解壓方式——ZIP 流式解壓技術,并成功應用在優酷繪本秒開項目中,30M+ 繪本平均加載時長只需 0.91s,加載耗時比傳統的解壓方式降低了 88.3%,讓用戶的閱讀體驗直線提升。實際對比效果如下:

??

??

 

優化前

??

[[341409]]

??

 

優化后

本文將介紹 ZIP 流式解壓的原理和技術實現路徑,希望為大家帶來啟發,將 ZIP 流式解壓技術更多的應用到業務中。

一 什么是ZIP

ZIP 是一種文件格式,定義了如何將多個文件、數據塊組織在一起形成一個完整的文件。例如我們常見的 .apk,.ipa,.sketch,都是ZIP文件。通常程序是這樣創建 ZIP 文件的:

壓縮單個文件形成單文件數據塊;

在數據塊前后添加文件描述信息;

對每個待壓縮的文件重復以上步驟后,拼接所有數據形成更大的數據塊;

提取所有文件描述信息,生成一份「文件目錄」,附在最后一個數據塊的尾部。

我們將文件前部描述信息稱為 Local File Header,文件后部描述信息稱為 Data Descriptor, 被壓縮的文件本身稱為 File Data,將最后的文件目錄稱為 Central Directory。以上所有合在一起,就是一個標準的 ZIP 文件。如下圖:

??

??

 

ZIP 文件格式

一個標準的解壓方式總是從讀取 ZIP 文件末尾開始的,我們以解壓上圖的 File Data 1 為例:

??

??

 

首先在 ZIP 文件末尾找到 Central Directory 數據塊;

在 Central Directory 數據塊中找到 File Header 1;

從 File Header 1 中讀取 Local File Header 1 的偏移量和 File Data 1 的相關信息;

根據偏移量找到 Local File Header 1;

讀取 Local File Header 1;

解密 File Data 1(如果需要);

解壓 File Data 1;

讀取 Data Descriptor 1;

使用 File Header 1 中保存的 CRC-32 做校驗步驟 7 中計算的 CRC-32,以確保解壓后的數據完整性。

標準解壓方式存在的不足

可以發現,標準的解壓強依賴尾部的 Central Directory。當 ZIP 文件存儲在 cdn 上時,哪怕我們只想訪問其中的一個文件,也必須下載整個 ZIP 解壓后才可訪問。假如 ZIP 文件有 100 MB,但是我們只需要訪問其中的某一個 10 KB 的文件,那么下載整個 ZIP 將是對流量的巨大浪費。

二 優酷技術方案:ZIP流式解壓

我們的一個初步的想法是能不能邊下載邊解壓?

要實現這點,首先需要改變解壓方式,使其不能再依賴尾部的 Central Directory。

根據 ZIP 文件格式標準可知,除了 Central Directory,每個 File Data 頭部的 Loca File Header 部分也包含了該文件的相關信息。

假如 Local File Header 中包含了充分的信息,我們也許可以基于 Local File Header 去解壓文件數據,其解壓流程就可以變為:

??

??

 

從頭開始,搜索到 Local File Header 1;

讀取 Local File Header 1;

解密 File Data 1(如果需要);

解壓 File Data 1;

讀取 Data Descriptor 1;

CRC32 的校驗。

那么 Local File Header 里到底存儲了什么?是否滿足解密解壓所需?

了解 Local File Header

我們根據文檔對 Local File Header 的描述,畫出其二進制文件中的排列:

??

??

 

Local File Header 數據結構

其中的關鍵信息為:

Signature

元數據簽名

Compress Method

壓縮算法

Compressed Size

壓縮后文件大小

Uncompressed Size

壓縮前文件大小

CRC-32

文件的循環冗余校驗值

File name

文件名

元數據簽名是一個 Magic Number,用來標記接下來數據是什么內容。例如 Local File Header 的簽名是 0x04034b50,用 char 表示也就是 { 'P', 'K', '3', '4' }。當讀取到對應數據簽名時,則意味著接下來的數據結構符合對應元數據的定義,需要使用對應規則解析。

Compress Method 指明數據塊用何種算法壓縮,解壓需要使用對應的算法。

Compressed Size 和 UnCompressed Size可以幫助確定文件的結尾地址和 Data Descriptor 的偏移量。這兩個 Size 也是文件解密時 HMAC 計算的關鍵。

有了 Magic Number 作為元數據簽名,我們只需要逐字節遍歷去匹配這個 Number,就可以找到 Loca File Header,而不再需要依賴尾部的定位信息。而且 Local File Header 中存儲的元數據足夠我們決定解壓算法、計算大小、校驗 CRC-32 了。

還有一個問題是,解壓縮算法是否支持流式解壓縮?是否有特定的上下文依賴?通過了解壓縮算法的原理[1],我們知道,所有的壓縮算法都是支持從頭部開始流式解壓的。

而下載方面,文件是以從頭到尾連續的方式下載,這又天然地和和從頭解壓的方式配合,便可以初步實現邊下邊解!

加密 ZIP 文件的問題

一切都相當順利,直到遇到了加密后的 ZIP 文件。加密后的 ZIP 文件的 Local File Header 中的關鍵信息除了簽名和文件名以外,其他信息都被隱去,需要去 Central Directory 中讀取。

再一次,我們回到了依賴 Central Directory 的狀態。

在失去如此多關鍵信息的情況下能否繼續做到流式解壓?我們需要先挖掘一下 ZIP 的加密方式。

ZIP 的加密方式

ZIP 文件支持多種加密方式,最常見的是 Traditional PKWARE Encryption 和 AES Encryption 。

Traditional PKWARE Encryption 是 ZIP 自定義的一種基于密碼的對稱加密方式,每個字節的加密僅和密碼有關,加密前后的數據長度不變。這種不依賴上下文的加密方式可以實現我們需要的流式解密。

AES 加密采用的是 CTR 模式。CTR 模式將明文分組,并生成一個計數器。使用密鑰對計數器進行加密生成二進制字節流。利用這個字節流和明文進行 XOR 操作進行加密。其解密方式也是一樣的。

這種方式也支持流式解密。

??

??

 

兩種常用的加密方式都支持流式解密,那么加解密需要的關鍵信息,在 Local File Header 中是否有存儲就成了能否流式解密的關鍵。

流式解密的關鍵信息

無論是 Traditional PKWARE Encryption 還是 AES Encryption,在解密時都需要一些除密碼之外的關鍵信息,例如鹽值,加密算法的強度等。此外,在 AES 加密的 ZIP 文件中, Local File Header 中的 Compress Method 字段被抹去,這樣我們便無法知曉壓縮算法,因此無法解壓。

至此,問題集中為:

  • Local File Header 中是否有足夠的加密所需信息。
  • 加密的 ZIP 文件,是否能在除 Central Directory 以外的位置找到 Compress Method 字段。

Local File Header 中加密相關的信息

ZIP 格式的設計者在設計 ZIP 文件格式的初期就提供了文件拓展能力,一些額外的拓展數據可以存放在 Local File Header 的 Extra Field 中。ZIP AES 加密說明書[2]告訴我們 AES 的相關信息就存放在這里。其關鍵信息如下:

Signature

Extra Data 簽名(0x9901)

AES Encryption strength

AES 加密強度(128或192或256)

Actual compress Method

真正的壓縮算法

原來壓縮算法被藏到了 Extra Data 中。那么鹽值被存放在哪里了?答案是存放在 File Data 的頭尾。

??

??

 

綜上,我們找到解密所需的所有關鍵信息,整個流式解密解壓的所有技術點都被我們探索完。剩下的便是按原理實現,以及細節的打磨。

三 總結

說了那么多,流式解壓究竟有什么價值呢?

由于流式解壓實現了邊下載邊解壓,將整個操作的時長從下載 + 解壓縮變成了約等于純下載的時長,直接抹掉了解壓的耗時。在 39.1 MB 大小的 ZIP 包下載解壓測試中,耗時從 9.08 秒降低至 4.17 秒,有將近 100% 的提速!同時,你可以不必等待整個 ZIP 下載解壓完,而是在解壓完一小部分數據的時候,就直接展示 UI。用戶側看起來就好像一瞬間就解壓完了。

因此,流式解壓可以應用在許多時間敏感的操作里,也可以用來優化基于 ZIP 文件的相關業務。例如基于 ZIP 的全局換膚加速、基于 ZIP 的 Web 資源緩存加載的加速等等。前言中的優酷繪本秒開就是基于這一技術實現。

參考

[1]https://houbb.github.io/2018/11/09/althgorim-compress-althgorim-12-zip-02[2]AES Encryption Information: Encryption Specification AE-1 and AE-2https://www.winzip.com/win/en/aes_info.html[3]ZIP File Format Specificationhttps://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.2.1.TXT[4]AES Coding Tips for Developershttps://www.winzip.com/win/en/aes_tips.html

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

??戳這里,看該作者更多好文??

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2015-04-08 15:40:53

php在線解壓解壓zip文件

2021-05-08 00:00:27

JavaScript ZIP文件

2024-01-04 12:47:00

Linux命令工具

2018-02-28 13:20:40

Python解壓zip

2009-12-30 16:46:09

Ubuntu orac

2021-12-10 15:22:26

Go Zip 文件

2019-10-17 17:15:01

Linux解壓文件命令

2011-12-30 11:14:41

Javazip

2011-08-15 14:07:53

Objective-C解壓縮ZIP文件

2012-12-26 09:31:44

C#Winform

2012-05-10 09:43:28

2024-04-01 00:05:00

ChatGPTSSE

2021-01-03 09:44:34

解壓軟件解壓神器應用

2010-01-04 10:36:34

ubuntu Json

2010-01-08 14:13:14

Ubuntu 8.10

2010-01-07 16:47:01

2024-01-19 16:37:17

Linux操作系統

2010-01-07 16:34:08

Ubuntu apac

2016-03-04 09:42:12

無線技術WiFi

2009-12-25 18:05:05

Linux壓縮程式
點贊
收藏

51CTO技術棧公眾號

亚洲va韩国va欧美va精品| 七七婷婷婷婷精品国产| 精品国产99国产精品| 欧美在线观看www| 国产理论电影在线观看| 精品中文字幕一区二区| 久久久免费电影| 无码人妻aⅴ一区二区三区69岛| 欧美爱爱视频| 精品国产电影一区| 中文字幕一区二区三区在线乱码| 日韩性xxxx| 韩国午夜理伦三级不卡影院| 97久久精品视频| 97在线观看视频免费| 免费看久久久| 日韩一区二区影院| 爆乳熟妇一区二区三区霸乳| 免费在线中文字幕| 中文字幕av在线一区二区三区| 成人久久18免费网站漫画| 波多野结衣不卡| 在线成人亚洲| 欧美成人全部免费| 免费看的黄色录像| 网曝91综合精品门事件在线| 日韩视频在线你懂得| 国产福利一区视频| 蜜桃视频m3u8在线观看| 亚洲精品免费电影| 亚洲一区二区在| 六十路在线观看| 成人免费va视频| 99re在线| 一区二区三区免费在线视频| 午夜亚洲影视| 97人人做人人爱| 久草视频免费播放| 亚洲精品国产偷自在线观看| 国产亚洲精品久久| 老司机福利av| 天堂av一区二区三区在线播放| 日韩欧美自拍偷拍| 91欧美一区二区三区| 久久影视精品| 欧美日韩小视频| 国产三级三级三级看三级| 午夜欧美激情| 精品电影在线观看| 欧美啪啪免费视频| 色在线免费观看| 亚洲aaa精品| av在线播放天堂| 成全电影大全在线观看| 亚洲一区二区三区在线看| 欧美日韩一级在线| 国产黄色小视频在线| 亚洲欧美一区二区三区孕妇| 色撸撸在线观看| 国产激情小视频在线| 亚洲摸摸操操av| 毛片在线视频观看| 波多野结依一区| 午夜av一区二区| 波多野结衣50连登视频| 丝袜美腿一区| 欧美日韩另类国产亚洲欧美一级| 久久久久久三级| 日本在线一区二区| 欧美mv日韩mv国产网站| 亚洲精品激情视频| 久久不见久久见中文字幕免费| 亚洲一级黄色av| 亚洲怡红院在线观看| 一本到12不卡视频在线dvd| 久久久国产一区二区| 久久黄色免费视频| 噜噜噜久久亚洲精品国产品小说| 国产精品电影久久久久电影网| 中文字幕日韩经典| 国产美女娇喘av呻吟久久| 国产91视觉| 国产精品二线| 亚洲欧美激情视频在线观看一区二区三区| 国产 欧美 日本| 中文字幕在线免费观看视频| 欧美三级电影一区| 日韩成人av影院| 国产在线日韩精品| 欧美富婆性猛交| 神马久久久久久久| 奇米一区二区三区| 国产另类自拍| 99免在线观看免费视频高清| 亚洲免费观看在线观看| 无码人妻丰满熟妇区96| 男人亚洲天堂| 亚洲另类xxxx| 久久99久久98精品免观看软件| 久久一区中文字幕| 97自拍视频| 国产在线视频你懂得| 亚洲综合无码一区二区| 欧美大尺度做爰床戏| 一区二区网站| 中文字幕亚洲综合久久| 91午夜视频在线观看| 激情六月婷婷久久| 色999日韩自偷自拍美女| 久久电影网站| 欧美日韩一区二区三区在线看| 亚洲成年人av| 希岛爱理一区二区三区| 日本视频久久久| 性一交一乱一色一视频麻豆| 欧美国产成人精品| 黄色大片中文字幕| 欧美日本三级| 日韩中文字幕在线观看| 欧美性猛交bbbbb精品| 高潮精品一区videoshd| 一级一片免费播放| 亚洲电影有码| 亚洲色图国产精品| 九九热精品视频在线| 成人手机在线视频| 欧美a级黄色大片| 国产成人精品一区二区三区免费| 亚洲免费av网址| 日本一本高清视频| 国产精品99久久久久久宅男| 在线观看成人av电影| 欧美aaa视频| 亚洲欧美综合v| 亚洲欧美自拍视频| 久久久综合精品| 波多野结衣家庭教师在线| silk一区二区三区精品视频| 久久在精品线影院精品国产| 在线观看黄色网| 中文字幕不卡在线观看| 91热这里只有精品| 激情五月综合网| 国产999精品久久久| 亚洲人妻一区二区| 欧美网站在线观看| 成人影视免费观看| 久久久久久夜| 神马影院午夜我不卡| 精品肉辣文txt下载| 国产香蕉97碰碰久久人人| 成年人视频免费| 中文字幕成人在线观看| 亚洲欧美日韩综合网| 久久麻豆精品| 96pao国产成视频永久免费| 黄av在线播放| 欧美成人三级电影在线| 国产精彩视频在线| 91老司机福利 在线| 日韩中文字幕免费在线| 91欧美大片| 99在线免费观看视频| 俄罗斯一级**毛片在线播放| 日韩大片免费观看视频播放| 黄色片视频免费| 国产精品久久久久久户外露出| 天天久久综合网| 精品动漫一区| 日本欧美色综合网站免费| 日本成人片在线| 久久艹在线视频| 成人午夜免费在线观看| 色综合婷婷久久| 欧美视频一区二区在线| 高清在线观看日韩| 日韩在线第三页| 性xxxx欧美老肥妇牲乱| 狠狠爱一区二区三区| 日韩色淫视频| 久久久久久久999| 成人在线免费电影| 日韩欧美高清一区| 福利网址在线观看| 一区二区三区四区在线播放| 国产精品久久久久久久无码| 美女在线视频一区| 青青草视频在线免费播放| 日韩理论在线| 国产日韩欧美亚洲一区| 欧洲精品久久久久毛片完整版| 久久久久久综合网天天| freemovies性欧美| 精品精品欲导航| 亚洲精品无码久久久久| 亚洲一区二区欧美日韩| 91动漫免费网站| 99久久久免费精品国产一区二区| 在线观看免费视频高清游戏推荐| 激情亚洲成人| 欧美精品一区二区性色a+v| 青青草这里只有精品| 亚洲一区免费网站| 国产韩日精品| 77777亚洲午夜久久多人| 免费不卡视频| 亚洲精美色品网站| 国产成人精品a视频| 91国内精品野花午夜精品 | 婷婷在线观看视频| 91精品国产91久久久久久一区二区| 日韩精品一区不卡| 婷婷成人综合网| 黑人巨大精品一区二区在线| 国产精品每日更新| 熟女俱乐部一区二区视频在线| 懂色一区二区三区免费观看| 日本中文字幕精品—区二区| 亚洲综合日韩| 亚洲国产成人精品无码区99| 欧美激情五月| 午夜在线视频免费观看| 日韩影院二区| 日本一区免费看| 日韩精选在线| 九色91国产| 理论片一区二区在线| 成人精品一二区| 一区二区精彩视频| 91手机在线视频| 色悠久久久久综合先锋影音下载 | 成午夜精品一区二区三区软件| 亚洲一区二区三区久久| 四虎国产精品成人免费影视| 国产精品免费视频久久久| 亚洲承认视频| 国产精品第8页| 国产精品99久久久久久董美香| 国产国语videosex另类| 日本一区免费网站| 国产精品视频xxxx| 欧美aaaaaaaa| 91人人爽人人爽人人精88v| 9.1麻豆精品| 亚洲精品日韩av| 日本高清久久| 国产呦系列欧美呦日韩呦| 久久久久97| 久久精品国产一区二区三区日韩 | 青青艹在线观看| 欧美色中文字幕| 亚洲在线免费观看视频| 91精品免费观看| 亚洲国产精彩视频| 亚洲激情第一页| 色视频在线观看| 一区二区三区视频免费| 欧洲美女少妇精品| 欧美老女人性生活| 超碰激情在线| 国产ts人妖一区二区三区| 日韩电影免费观| 国产精品丝袜白浆摸在线| 国产在线不卡一区二区三区| 99re在线视频上| 亚洲三级网页| 中文字幕av日韩精品| 欧美激情 亚洲a∨综合| 青青青青草视频| 久久天天综合| www.国产福利| caoporen国产精品视频| 免费在线观看a视频| 亚洲免费看黄网站| 国产欧美一区二区三区在线看蜜臂| 欧洲生活片亚洲生活在线观看| 97超视频在线观看| 亚洲国产精品资源| 1024国产在线| 97国产精品视频| jvid一区二区三区| 高清国产在线一区| av中文一区| 国产欧美精品aaaaaa片| 久久久久久色| 中国特级黄色片| 中文字幕不卡三区| 日本在线小视频| 欧美精品乱码久久久久久| 欧美一级免费片| 精品国产一区二区三区久久狼5月| 国产第一页在线| 国产精品久久久久久av福利软件| 日韩精品一区二区三区免费视频| 欧美精品尤物在线| 久久久久久久久久久9不雅视频| 黄色国产一级视频| 久久97超碰国产精品超碰| a级在线观看视频| 一区二区三区四区不卡在线| 东京热一区二区三区四区| 日韩欧美一级二级| 3p视频在线观看| 538国产精品视频一区二区| 国产免费区一区二区三视频免费| 免费在线国产精品| 亚洲国产裸拍裸体视频在线观看乱了中文| 中文字幕22页| 久久精品视频网| 在线观看中文字幕视频| 日韩小视频在线观看专区| 成人福利在线| 琪琪第一精品导航| 国产精品nxnn| 99re6这里有精品热视频| 免费xxxx性欧美18vr| 久久久久国产精品区片区无码| 亚洲综合色在线| 国产精品一区二区av白丝下载 | 欧美日本韩国一区| 韩国三级av在线免费观看| 97精品伊人久久久大香线蕉| 中文字幕久久精品一区二区| 日本三日本三级少妇三级66| 蜜臀av性久久久久蜜臀aⅴ四虎| 深爱五月激情网| 午夜视频一区在线观看| 亚洲精品国产片| 欧美精品免费播放| 秋霞影院一区| 欧美一级特黄aaaaaa在线看片| 精品无人区卡一卡二卡三乱码免费卡| 性猛交ⅹxxx富婆video | www日韩在线观看| 久久亚洲综合色一区二区三区 | 国产精品扒开做爽爽爽的视频| 国产精品亚洲视频在线观看| 日韩精品网站| 天天干天天综合| 国产精品成人网| 国产精品乱码久久久| 久久精品青青大伊人av| 国产美女亚洲精品7777| www.亚洲成人网| www.一区二区| 在线观看亚洲天堂| 日韩久久免费电影| 新片速递亚洲合集欧美合集| 奇米影视首页 狠狠色丁香婷婷久久综合| 性欧美videos另类喷潮| 88久久精品无码一区二区毛片| 欧美性开放视频| 国产高清视频在线播放| 国产区精品视频| 一二三区不卡| 伦理片一区二区| 色综合咪咪久久| 97电影在线观看| 91中文字幕在线观看| 欧美日韩99| 人妻丰满熟妇av无码久久洗澡| 日韩欧美国产激情| av在线资源站| 亚洲综合在线做性| 国产亚洲亚洲| xxxxx99| 欧美成人vps| 久久uomeier| 在线视频福利一区| 成人午夜在线视频| 色老头在线视频| 另类图片亚洲另类| 欧美人妖视频| 亚洲欧美日韩综合网| 亚洲地区一二三色| 国产三级在线免费观看| 91久久在线播放| 国产精品视频久久一区| 91免费在线看片| 亚洲国产97在线精品一区| 欧美日韩五码| 欧美黑人在线观看| 日本一区二区视频在线观看| 99久久亚洲精品日本无码| 91精品国产777在线观看| 日韩黄色大片网站| 少妇一级淫片免费放播放| 欧美日韩一区二区在线观看| 8x8ⅹ拨牐拨牐拨牐在线观看| 视频在线99re| 成人在线综合网| 一级黄色小视频| 欧美怡春院一区二区三区| 91tv官网精品成人亚洲| 亚洲国产精品成人综合久久久| 91精品在线观看入口| 粉嫩一区二区三区| 免费一级特黄毛片| 亚洲欧美另类综合偷拍| 成人动漫在线免费观看|