3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件压缩算法详细分析(ZIP)及解压实例解释

發布時間:2024/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件压缩算法详细分析(ZIP)及解压实例解释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:https://www.cnblogs.com/esingchan/p/3958962.html

最近自己實現了一個ZIP壓縮數據的解壓程序,覺得有必要把ZIP壓縮格式進行一下詳細總結,數據壓縮是一門通信原理和計算機科學都會涉及到的學科,在通信原理中,一般稱為信源編碼,在計算機科學里,一般稱為數據壓縮,兩者本質上沒啥區別,在數學家看來,都是映射。一方面在進行通信的時候,有必要將待傳輸的數據進行壓縮,以減少帶寬需求;另一方面,計算機存儲數據的時候,為了減少磁盤容量需求,也會將文件進行壓縮,盡管現在的網絡帶寬越來越高,壓縮已經不像90年代初那個時候那么迫切,但在很多場合下仍然需要,其中一個原因是壓縮后的數據容量減小后,磁盤訪問IO的時間也縮短,盡管壓縮和解壓縮過程會消耗CPU資源,但是CPU計算資源增長得很快,但是磁盤IO資源卻變化得很慢,比如目前主流的SATA硬盤仍然是7200轉,如果把磁盤的IO壓力轉化到CPU上,總體上能夠提升系統運行速度。壓縮作為一種非常典型的技術,會應用到很多很多場合下,比如文件系統、數據庫、消息傳輸、網頁傳輸等等各類場合。盡管壓縮里面會涉及到很多術語和技術,但無需擔心,博主盡量將其描述得通俗易懂。另外,本文涉及的壓縮算法非常主流并且十分精巧,理解了ZIP的壓縮過程,對理解其它相關的壓縮算法應該就比較容易了。

?

1、引子

壓縮可以分為無損壓縮和有損壓縮,有損,指的是壓縮之后就無法完整還原原始信息,但是壓縮率可以很高,主要應用于視頻、話音等數據的壓縮,因為損失了一點信息,人是很難察覺的,或者說,也沒必要那么清晰照樣可以看可以聽;無損壓縮則用于文件等等必須完整還原信息的場合,ZIP自然就是一種無損壓縮,在通信原理中介紹數據壓縮的時候,往往是從信息論的角度出發,引出香農所定義的熵的概念,這方面的介紹實在太多,這里換一種思路,從最原始的思想出發,為了達到壓縮的目的,需要怎么去設計算法。而ZIP為我們提供了相當好的案例。

盡管我們不去探討信息論里面那些復雜的概念,不過我們首先還是要從兩位信息論大牛談起。因為是他們奠基了今天大多數無損數據壓縮的核心,包括ZIP、RAR、GZIP、GIF、PNG等等大部分無損壓縮格式。這兩位大牛的名字分別是Jacob Ziv和Abraham Lempel,是兩位以色列人,在1977年的時候發表了一篇論文《A Universal Algorithm for Sequential Data Compression》,從名字可以看出,這是一種通用壓縮算法,所謂通用壓縮算法,指的是這種壓縮算法沒有對數據的類型有什么限定。不過論文我覺得不用仔細看了,因為博主作為一名通信專業的PHD,看起來也焦頭爛額,不過我們后面可以看到,它的思想還是很簡單的,之所以看起來復雜,主要是因為IEEE的某些雜志就是這個特點,需要從數學上去證明,這種壓縮算法到底有多優,比如針對一個各態歷經的隨機序列(不用追究什么叫各態歷經隨機序列),經過這樣的壓縮算法后,是否可以接近信息論里面的極限(也就是前面說的熵的概念)等等,不過在理解其思想之前,個人認為沒必要深究這些東西,除非你要發論文。這兩位大牛提出的這個算法稱為LZ77,兩位大牛過了一年又提了一個類似的算法,稱為LZ78,思想類似,ZIP這個算法就是基于LZ77的思想演變過來的,但ZIP對LZ77編碼之后的結果又繼續進行壓縮,直到難以壓縮為止。除了LZ77、LZ78,還有很多變種的算法,基本都以LZ開頭,如LZW、LZO、LZMA、LZSS、LZR、LZB、LZH、LZC、LZT、LZMW、LZJ、LZFG等等,非常多,LZW也比較流行,GIF那個動畫格式記得用了LZW。我也寫過解碼程序,以后有時間可以再寫一篇,但感覺跟LZ77這些類似,寫的必要性不大。

ZIP的作者是一個叫Phil Katz的人,這個人算是開源界的一個具有悲劇色彩的傳奇人物。雖然二三十年前,開源這個詞還沒有現在這樣風起云涌,但是總有一些具有黑客精神的牛人,內心里面充滿了自由,無論他處于哪個時代。Phil Katz這個人是個牛逼程序員,成名于DOS時代,我個人也沒有經歷過那個時代,我是從Windows98開始接觸電腦的,只是從書籍中得知,那個時代網速很慢,撥號使用的是只有幾十Kb(比特不是字節)的貓,56Kb實際上是這種貓的最高速度,在ADSL出現之后,這種技術被迅速淘汰。當時記錄文件的也是硬盤,但是在電腦之間拷貝文件的是軟盤,這個東西我大一還用過,最高容量記得是1.44MB,這還是200X年的軟盤,以前的軟盤容量具體多大就不知道了,Phil Katz上網的時候還不到1990年,WWW實際上就沒出現,瀏覽器當然是沒有的,當時上網干嘛呢?基本就是類似于網管敲各種命令,這樣實際上也可以聊天、上論壇不是嗎,傳個文件不壓縮的話肯定死慢死慢的,所以壓縮在那個時代很重要。當時有個商業公司提供了一種稱為ARC的壓縮軟件,可以讓你在那個時代聊天更快,當然是要付費的,Phil Katz就感覺到不爽,于是寫了一個PKARC,免費的,看名字知道是兼容ARC的,于是網友都用PKARC了,ARC那個公司自然就不爽,把哥們告上了法庭,說牽涉了知識產權等等,結果Phil Katz坐牢了。。。牛人就是牛人, 在牢里面冥思苦想,決定整一個超越ARC的牛逼算法出來,牢里面就是適合思考,用了兩周就整出來的,稱為PKZIP,不僅免費,而且這次還開源了,直接公布源代碼,因為算法都不一樣了,也就不涉及到知識產權了,于是ZIP流行開來,不過Phil Katz這個人沒有從里面賺到一分錢,還是窮困潦倒,因為喝酒過多等眾多原因,2000年的時候死在一個汽車旅館里。英雄逝去,精神永存,現在我們用UE打開ZIP文件,我們能看到開頭的兩個字節就是PK兩個字符的ASCII碼。

?

2、一個案例的入門思考

好了,Phil Katz在牢里面到底思考了什么?用什么樣的算法來壓縮數據呢?我們想一個簡單的例子:

生,容易。活,容易。生活,不容易。

上面這句話假如不壓縮,如果使用Unicode編碼,每個字會用2個字節表示。為什么是兩個字節呢?Unicode是一種國際標準,把常見各國的字符,比如英文字符、日文字符、韓文字符、中文字符、拉丁字符等等全部制定了一個標準,顯然,用2個字節可以最多表示2^16=65536個字符,那么65536就夠了嗎?生僻字其實是很多的,比如光康熙字典里面收錄的漢字就好幾萬,所以實際上是不夠的,那么是不是擴到4個字節?也可以,這樣空間倒是變大了,可以收錄更多字符,但一方面擴到4個字節就一定保證夠嗎?另一方面,4個字節是不是太浪費空間了,就為了那些一般情況都不會出現的生僻字?所以,一般情況下,使用2個字節表示,當出現生僻字的時候,再使用4個字節表示。這實際上就體現了信息論中數據壓縮基本思想,出現頻繁的那些字符,表示得短一些;出現稀少的,可以表示得長些(反正一般情況下也不會出現),這樣整體長度就會減小。除了Unicode,ASCII編碼是針對英文字符的編碼方案,用1個字節即可,除了這兩種編碼方案,還有很多地區性的編碼方案,比如GB2312可以對中文簡體字進行編碼,Big5可以對中文繁體字進行編碼。兩個文件如果都使用一種編碼方案,那是沒有問題的,不過考慮到國際化,還是盡量使用Unicode這種國際標準吧。不過這個跟ZIP沒啥關系,純屬背景介紹。

好了,回到我們前面說的例子,一共有17個字符(包括標點符號),如果用普通Unicode表示,一共是17*2=34字節??刹豢梢詨嚎s呢?所有人一眼都可以看出里面出現了很多重復的字符,比如里面出現了好多次容易(實際上是容易加句號三個字符)這個詞,第一次出現的時候用普通的Unicode,第二次出現的“容易?!眲t可以用(距離、長度)表示,距離的意思是接下來的字符離前面重復的字符隔了幾個,長度則表示有幾個重復字符,上面的例子的第二個“容易?!本捅硎緸?#xff08;5,3),就是距離為5個字符,長度是3,在解壓縮的時候,解到這個地方的時候,往前跳5個字符,把這個位置的連續3個字符拷貝過來就完成了解壓縮,這實際上不就是指針的概念?沒有錯,跟指針很類似,不過在數據壓縮領域,一般稱為字典編碼,為什么叫字典呢,當我們去查一個字的時候,我們總是先去目錄查找這個字在哪一頁,再翻到那一頁去看,指針不也是這樣,指針不就是內存的地址,要對一個內存進行操作,我們先拿到指針,然后去那塊內存去操作。所謂的指針、字典、索引、目錄等等術語,不同的背景可能稱呼不同,但我們要理解他們的本質。如果使用(5,3)這種表示方法,原來需要用6個字節表示,現在只需要記錄5和3即可。那么,5和3怎么記錄呢?一種方法自然還是可以用Unicode,那么就相當于節省了2個字節,但是有兩個問題,第一個問題是解壓縮的時候怎么知道是正常的5和3這兩個字符,還是這只是一個特殊標記呢?所以前面還得加一個標志來區分一下,到底接下來的Unicode碼是指普通字符,還是指距離和長度,如果是普通Unicode,則直接查Unicode碼表,如果是距離和長度,則往前面移動一段距離,拷貝即可。第二個問題,還是壓縮程度不行,這么一弄,感覺壓縮不了多少,如果重復字符比較長那倒是比較劃算,因為反正“距離+長度”就夠了,但比如這個例子,如果5和3前面加一個特殊字節,豈不是又是3個字節,那還不如不壓縮。咋辦呢?能不能對(5,3)這種整數進行再次壓縮?這里就利用了我們前面說的一個基本原則:出現的少的整數多編一些比特,出現的多的整數少編一些比特。那么,比如3、4、5、6、7、8、9這些距離誰出現得多?誰出現的少呢?誰知道?

壓縮之前當然不知道,不過掃描一遍不就知道了?比如,后面那個重復的字符串“容易。”按照前面的規則可以表示為(7,3),即離前面重復的字符串距離為7,長度為3。(7,3)指著前面跟自己一樣那個字符串。那么,為什么不指著第一個“容易?!币钢诙€“容易?!蹦?#xff1f;如果指著第一個,那就不是(7,3)了,就是(12,3)了。當然,表示為(12,3)也可以解壓縮,但是有一個問題,就是12這個值比7大,大了又怎么了?我們在生活中會發現一些普遍規律,重復現象往往具有局部性。比如,你跟一個人說話,你說了一句話以后,往往很快會重復一遍,但是你不會隔了5個小時又重復這句話,這種特點在文件里面也存在著,到處都是這種例子,比如你在編程的時候,你定義了一個變量int nCount,這個nCount一般你很快就會用到,不會離得很遠。我們前面所說的距離代表了你隔了多久再說這句話,這個距離一般不大,既然如此,應該以離當前字符串距離最近的那個作為記錄的依據(也就是指向離自己最近那個重復字符串),這樣的話,所有的標記都是一些短距離,比如都是3、4、5、6、7而不會是3、5、78、965等等,如果大多數都是一些短距離,那么這些短距離就可以用短一些的比特表示,長一些的距離不太常見,則用一些長一些的比特表示。這樣, 總體的表示長度就會減少。好了,我們前面得到了(5,3)、(7、3)這種記錄重復的表示,距離有兩種:5、7;長度只有1種:3。咋編碼?越短越好。

既然表示的比特越短越好,3表示為0、5表示為10、7表示為11,行不行?這樣(5,3),(7,3)就只需要表示為100、110,這樣豈不是很短?貌似可以,貌似很高效。

但解壓縮遇到10這兩個比特的時候,怎么知道10表示5呢?這種表示方法是一個映射表,稱為碼表。我們設計的上面這個例子的碼表如下:

3-->0

5-->10

7-->11

這個碼表也得傳過去或者記錄在壓縮文件里才行啊,否則無法解壓縮,但會不會記錄了碼表以后整體空間又變大了,會不會起不到壓縮的作用?而且一個碼表怎么記錄?碼表記錄下來也是一堆數據,是不是也需要編碼?碼表是否可以繼續壓縮?那豈不是又需要新的碼表?壓縮會不會是一個永無止境的過程?作為一個入門級的同學,大概想到這兒就不容易想下去了。

?

3、ZIP中的LZ編碼思想

上面我們說的重復字符串用指針標記記錄下來,這種方法就是LZ這兩個人提出來的,理解起來比較簡單。后面分析(5,3)這種指針標記應該怎么編碼的時候,就涉及到一種非常廣泛的編碼方式,Huffman編碼,Huffman大致和香農是一個時代的人,這種編碼方式是他在MIT讀書的時候提出來的。接下來,我們來看看ZIP是怎么做的。

以上面的例子,一個很簡單的示意圖如下:

可以看出,ZIP中使用的LZ77算法和前面分析的類似,當然,如果仔細對比的話,ZIP中使用的算法和LZ提出來的LZ77算法其實還是有差異的,不過我建議不用仔細去扣里面的差異,思想基本是相同的,我們后面會簡要分析一下兩者的差異。LZ77算法一般稱為“滑動窗口壓縮”,我們前面說過,該算法的核心是在前面的歷史數據中尋找重復字符串,但如果要壓縮的文件有100MB,是不是從文件頭開始找?不是,這里就涉及前面提過的一個規律,重復現象是具有局部性的,它的基本假設是,如果一個字符串要重復,那么也是在附近重復,遠的地方就不用找了,因此設置了一個滑動窗口,ZIP中設置的滑動窗口是32KB,那么就是往前面32KB的數據中去找,這個32KB隨著編碼不斷進行而往前滑動。當然,理論上講,把滑動窗口設置得很大,那樣就有更大的概率找到重復的字符串,壓縮率不就更高了?初看起來如此,找的范圍越大,重復概率越大,不過仔細想想,可能會有問題,一方面,找的范圍越大,計算量會增大,不顧一切地增大滑動窗口,甚至不設置滑動窗口,那樣的軟件可能不可用,你想想,現在這種方式,我們在壓縮一個大文件的時候,速度都已經很慢了,如果增大滑動窗口,速度就更慢,從工程實現角度來說,設置滑動窗口是必須的;另一方面,找的范圍越大,距離越遠,出現的距離很多,也不利于對距離進行進一步壓縮吧,我們前面說過,距離和長度最好出現的值越少越好,那樣更好壓縮,如果出現的很多,如何記錄距離和長度可能也存在問題。不過,我相信滑動窗口設置得越大,最終的結果應該越好一些,不過應該不會起到特別大的作用,比如壓縮率提高了5%,但計算量增加了10倍,這顯然有些得不償失。

在第一個圖中,“容易?!笔且粋€重復字符串,距離distance=5,字符串長度length=3。當對這三個字符壓縮完畢后,接下來滑動窗口向前移動3個字符,要壓縮的是“我...”這個字符串,但這個串在滑動窗口內沒找到,所以無法使用distance+length的方式記錄。這種結果稱為literal。literal的中文含義是原義的意思,表示沒有使用distance+length的方式記錄的那些普通字符。literal是不是就用原始的編碼方式,比如Unicode方式表示?ZIP里不是這么做的,ZIP把literal認為也是一個數,盡管不能用distance+length表示,但不代表不可以繼續壓縮。另外,如果“我”出現在了滑動窗口內,是不是就可以用distance+length的方式表示?也不是,因為一個字出現重復,不值得用這種方式表示,兩個字呢?distance+length就是兩個整數,看起來也不一定值得,ZIP中確實認為2個字節如果在滑動窗口內找到重復,也不管,只有3個字節以上的重復字符串,才會用distance+length表示,重復字符串的長度越長越好,因為不管多長,都用distance+length表示就行了。

這樣的話,一段字符串最終就可以表示成literal、distance+length這兩種形式了。LZ系列算法的作用到此為止,下面,Phil Katz考慮使用Huffman對上面的這些LZ壓縮后的結果進行二次壓縮。個人認為接下來的過程才是ZIP的核心,所以我們要熟悉一下Huffman編碼。

?

4、ZIP中的Huffman編碼思想

上面LZ壓縮結果有三類(literal、distance、length),我們拿出distance一類來舉例。distance代表重復字符串離前一個一模一樣的字符串之間的距離,是一個大于0的整數。如何對一個整數進行編碼呢?一種方法是直接用固定長度表示,比如采用計算機里面描述一個4字節整數那樣去記錄,這也是可以的,主要問題當然是浪費存儲空間,在ZIP中,distance這個數表示的是重復字符串之間的距離,顯然,一般而言,越小的距離,出現的數量可能越多,而越大的距離,出現的數量可能越少,那么,按照我們前面所說的原則,小的值就用較少比特表示,大的值就用較多比特表示,在我們這個場景里,distance當然也不會無限大,比如不會超過滑動窗口的最大長度,假如對一個文件進行LZ壓縮后,得到的distance值為:

3、6、4、3、4、3、4、3、5

這個例子里,3出現了4次,4出現了3次,5出現了1次,6出現了1次。當然,不同的文件得到的結果不同,這里只是舉一個典型的例子,因為只有4種值,所以我們沒有必要對其它整數編碼。只需要對這4個整數進行編碼即可。

那么,怎么設計一個算法,符合3的編碼長度最短?6的編碼長度最長這種直觀上可行的原則(我們并沒有說這是理論上最優的方式)呢?

看起來似乎很難想出來。我們先來簡化一下,用固定長度表示。這里有4個整數,只要使用2個比特表示即可。于是這樣表示就很簡單:

00-->3; 01-->4; 10-->5;? 11-->6。

00、01這種編碼結果稱為碼字,碼字的平均長度是2。上面這個對應關系即為碼表,在壓縮時,需要將碼表放在最前面,后面的數字就用碼字表示,解碼時,先把碼表記錄在內存里,比如用一個哈希表記錄下來,解壓縮時,遇到00,就解碼為3等等。

因為出現了9個數,所以全部碼字總長度為18個比特。(我們暫時不考慮記錄碼表到底要占多少空間)

想要編碼結果更短,因為3出現的最多,所以考慮把3的碼字縮短點,比如3是不是可以用1個比特表示,這樣才算縮短吧,因為0和1只是二進制的一個標志,所以用0還是1沒有本質區別,那么,我們暫定把3用比特0表示。那么,4、5、6還能用0開頭的碼字表示呢?

這樣會存在問題,因為4、5、6的編碼結果如果以0開頭,那么,在解壓縮的時候,遇到比特0,就不知道是表示3還是表示4、5、6了,就無法解碼,當然,似乎理論上也不是不可以,比如可以往后解解看,比如假定0表示3的條件下往后解,如果無效則說明這個假設不對,但這種方式很容易出現兩個字符串的編碼結果是一樣的,這個誰來保證?所以,4、5、6都得以1開頭才行,那么,按照這個原則,4用1個比特也不行,因為5、6要么以0開頭,要么以1開頭,就無法編碼了,所以我們將4的碼字增加至2個比特,比如10,于是我們得到了部分碼表:

0-->3;10-->4。

按照這個道理,5、6既不能以0開頭,也不能以10開頭了,因為同樣存在無法解碼的問題,所以5應該以11開頭,就定為11行不行呢?也不行,因為6就不知道怎么編碼了,6也不能以0開頭,也不能以10、11開頭,那就無法表示了,所以,迫不得已,我們必須把5擴展一位,比如110,那么,6顯然就可以用111表示了,反正也沒有其他數了。于是我們得到了最終的碼表:

0-->3;10-->4;110-->5;111-->6。

看起來,編碼結果只能是這樣了,我們來算一下,碼字的總長度減少了沒有,原來的9個數是3、6、4、3、4、3、4、3、5,分別對應的碼字是:

0、111、10、0、10、0、10、0、110

算一下,總共16個比特,果然比前面那種方式變短了。我們在前面的設計過程中,是按照這些值出現次數由高到底的順序去找碼字的,比如先確定3,再確定4、5、6等等。按照一個碼字不能是另一個碼字的前綴這一規則,逐步獲得所有的碼字。這種編碼規則有一個專用術語,稱為前綴碼。Huffman編碼基本上就是這么做的,把出現頻率排個序,然后逐個去找,這個逐個去找的過程,就引入了二叉樹。不過Huffman的算法一般是從頻率由低到高排序,從樹的下面依次往上合并,不過本質上沒區別,理解思想即可。上面的結果可以用一顆二叉樹表示為下圖:

這棵樹也稱為碼樹,其實就是碼表的一種形式化描述,每個節點(除了葉子節點)都會分出兩個分支,左分支代表比特0,右邊分支代表1,從根節點到葉子節點的一個比特序列就是碼字。因為只有葉子節點可以是碼字,所以這樣也符合一個碼字不能是另一個碼字的前綴這一原則。說到這里,可以說一下另一個話題,就是一個映射表map在內存中怎么存儲,沒有相關經驗的可以跳過,map實現的是key-->value這樣的一個表,map的存儲一般有哈希表和樹形存儲兩類,樹形存儲就可以采用上面這棵樹,樹的中間節點并沒有什么含義,葉子節點的值表示value,從根節點到葉子節點上分支的值就是key,這樣比較適合存儲那些key由多個不等長字符組成的場合,比如key如果是字符串,那么把二叉樹的分支擴展很多,成為多叉樹,每個分支就是a,b,c,d這種字符,這棵樹也就是Trie樹,是一種很好使的數據結構。利用樹的遍歷算法,就實現了一個有序Map。

好了,我們理解了Huffman編碼的思想,我們來看看distance的實際情況。ZIP中滑動窗口大小固定為32KB,也就是說,distance的值范圍是1-32768。那么,通過上面的方式,統計頻率后,就得到32768個碼字,按照上面這種方式可以構建出來。于是我們會遇到一個最大的問題,那就是這棵樹太大了,怎么記錄呢?

好了,個人認為到了ZIP的核心了,那就是碼樹應該怎么縮小,以及碼樹怎么記錄的問題。

?

5、ZIP中Huffman碼樹的記錄方式

分析上面的例子,看看這個碼表:

0-->3;10-->4;110-->5;111-->6。

我們之前提過,0和1就是二進制的一個標志,互換一下其實根本不影響編碼長度,所以,下面的碼表其實是一樣的:

1-->3;00-->4;010-->5;011-->6。

1-->3;01-->4;000-->5;001-->6。

0-->3;11-->4;100-->5;101-->6。

。。。。。

這些都可以,而且編碼長度完全一樣,只是碼字不同而已。

對比一下第一個和第二個例子,對應的碼樹是這個樣子:

也就是說,我們把碼樹的任意節點的左右分支旋轉(0、1互換),也可以稱為樹的左右互換,其實不影響編碼長度,也就是說,這些碼表其實都是一樣好的,使用哪個都可以。

這個規律暗示了什么信息呢?暗示了碼表可以怎么記錄呢?Phil Katz當年在牢里也深深地思考了這一問題。

為了體會Phil Katz當時的心情,我們有必要盯著這兩棵樹思考幾分鐘:怎么把一顆樹用最少的比特記錄下來?

Phil Katz當時思考的邏輯我猜是這樣的,既然這些樹的壓縮程度都一樣,那干脆使用最特殊的那棵樹,反正壓縮程度都一樣,只要ZIP規定了這棵樹的特殊性,那么我記錄的信息就可以最少,這種特殊化的思想在后面還會看到。不同的樹當然有不同的特點,比如數據結構里面常見的平衡樹也是一類特殊的樹,他選的樹就是左邊那棵,這棵樹有一個特點,越靠左邊越淺,越往右邊越深,是這些樹中最不平衡的樹。ZIP里的壓縮算法稱為Deflate算法,這棵樹也稱為Deflate樹,對應的解壓縮算法稱為Inflate,Deflate的大致意思是把輪胎放氣了,意為壓縮;Inflate是給輪胎打氣的意思,意為解壓。那么,Deflate樹的特殊性又帶來什么了?

揭曉答案吧,Phil Katz認為換來換去只有碼字長度不變,如果規定了一類特殊的樹,那么就只需要記錄碼字長度即可。比如,一個有效的碼表是0-->3;10-->4;110-->5;111-->6。但只需要記錄這個對應關系即可:

3  4  5  6

1  2  3  3

也就是說,把1、2、3、3記錄下來,解壓一邊照著左邊那棵樹的形狀構造一顆樹,然后只需要1、2、3、3這個信息自然就知道是0、10、110、111。這就是Phil Katz想出來的ZIP最核心的一點:這棵碼樹用碼字長度序列記錄下來即可。

當然,只把1、2、3、3這個序列記錄下來還不行,比如不知道111對應5還是對應6?

所以,構造出樹來只是知道了有哪些碼字了,但是這些碼字到底對應哪些整數還是不知道。

Phil Katz于是又出現了一個想法:記錄1、2、3、3還是記錄1、3、2、3,或者3、3、2、1,其實都能構造出這棵樹來,那么,為什么不按照一個特殊的順序記錄呢?這個順序就是整數的大小順序,比如上面的3、4、5、6是整數大小順序排列的,那么,記錄的順序就是1、2、3、3。而不是2、3、3、1。

好了,根據1、2、3、3這個信息構造出了碼字,這些碼字對應的整數一個比一個大,假如我們知道編碼前的整數就是3、4、5、6這四個數,那就能對應起來了,不過到底是哪四個還是不知道啊?這個整數可以表示距離啊,距離不知道怎么去解碼LZ?

Phil Katz又想了,既然distance的范圍是1-32768,那么就按照這個順序記錄。上面的例子1和2沒有,那就記錄長度0。所以記錄下來的碼字長度序列為:

0、0、1、2、3、3、0、0、0、0、0、。。。。。。。。。。。。

這樣就知道構造出來的碼字對應哪個整數了吧,但因為distance可能的值很多(32768個),但實際出現的往往不多,中間會出現很多0(也就是根本就沒出現這個距離),不過這個問題倒是可以對連續的0做個特殊標記,這樣是不是就行了呢?還有什么問題?

我們還是要站在時代的高度來看待這個問題。我們明白,每個distance肯定對應唯一一個碼字,使用Huffman編碼可以得到所有碼字,但是因為distance可能非常多,雖然一般不會有32768這么多,但對一個大些的文件進行LZ編碼,distance上千還是很正常的,所以這棵樹很大,計算量、消耗的內存都容易超越了那個時代的硬件條件,那么怎么辦呢?這里再次體現了Phil Katz對Huffman編碼掌握的深度,他把distance劃分成多個區間,每個區間當做一個整數來看,這個整數稱為Distance Code。當一個distance落到某個區間,則相當于是出現了那個Code,多個distance對應于一個Distance Code,Distance雖然很多,但Distance Code可以劃分得很少,只要我們對Code進行Huffman編碼,得到Code的編碼后,Distance Code再根據一定規則擴展出來。那么,劃分多少個區間?怎么劃分區間呢?我們分析過,越小的距離,出現的越多;越大的距離,出現的越少,所以這種區間劃分不是等間隔的,而是越來越稀疏的,類似于下面的劃分:

1、2、3、4這四個特殊distance不劃分,或者說1個Distance就是1個區間;5,6作為一個區間;7、8作為一個區間等等,基本上,區間的大小都是1、2、4、8、16、32這么遞增的,越往后,涵蓋的距離越多。為什么這么分呢?首先自然是距離越小出現頻率越高,所以距離值小的時候,劃分密一些,這樣相當于一個放大鏡,可以對小的距離進行更精細地編碼,使得其編碼長度與其出現次數盡量匹配;對于距離較大那些,因為出現頻率低,所以可以適當放寬一些。另一個原因是,只要知道這個區間Code的碼字,那么對于這個區間里面的所有distance,后面追加相應的多個比特即可,比如,17-24這個區間的Huffman碼字是110,因為17-24這個區間有8個整數,于是按照下面的規則即可獲得其distance對應的碼字:

17-->110 000

18-->110 001

19-->110 010

20-->110 011

21-->110 100

22-->110 101

23-->110 110

24-->110 111

這樣計算復雜度和內存消耗是不是很小了,因為需要進行Huffman編碼的整數一下字變少了,這棵樹不會多大,計算起來時間和空間復雜度降低,擴展起來也比較簡單。當然,從理論上來說,這樣的編碼方式實際上將編碼過程分為了兩級,并不是理論上最優的,把所有distance當作一個大空間去編碼才可能得到最優結果,不過還是那句話,工程實現的限制,在壓縮軟件實現上,我們不能用壓縮率作為衡量一個算法優劣的唯一指標,其實耗費的時間和空間同樣是指標,所以需要看綜合指標。很多其他軟件也一樣,擴展性、時間空間復雜度、穩定性、移植性、維護的方便性等等是工程上很重要的東西。我沒有看過RAR是如何壓縮的,有可能是在類似的地方進行了改進,如果如此,那也是站在巨人的肩膀上,而且硬件條件不同,進行一些改進也并不奇怪。

具體來說,Phil Katz把distance劃分為30個區間,如下圖:

這個圖是我從David Salomon的《Data Compression The Complete Reference》這本書(第四版)中拷貝出來的,下面的有些圖也是,如果需要對數據壓縮進行全面的了解,這本書幾乎是最全的了,強烈推薦。

當然,你要問為什么是30個區間,我也沒分析過,也許是復雜度和壓縮率經過試驗之后的一種折中吧。

其中,左邊的Code表示區間的編號,是0-29,共30個區間,這只是個編號,沒有特別的含義,但Huffman就是對0-29這30個Code進行編碼的,得到區間的碼字;

bits表示distance的碼字需要在Code的碼字基礎上擴展幾位,比如0就表示不擴展,最大的13表示要擴展13位,因此,最大的區間包含的distance數量為8192個。

Distance一列則表示這個區間涵蓋的distance范圍。

理解了碼樹如何有效記錄,以及如何縮小碼樹的過程,我覺得就理解了ZIP的精髓。

?

6、ZIP中literal和length的壓縮方式

說完了distance,LZ編碼結果還有兩類:literal和length。這兩類也利用了類似于distance的方式進行壓縮。

前面分析過,literal表示未匹配的字符,我們前面之所以拿漢字來舉例,完全是為了便于理解,ZIP之所以是通用壓縮,它實際上是針對字節作為基本字符來編碼的,所以一個literal至多有256種可能。

length表示重復字符串長度,length=1當然不會出現,因為一個字符不值得用distance+length去記錄,重復字符串當然越長越好,Phil Katz(下面還是簡稱PK了,拷貝太麻煩)認為,length=2也不值得用這種方式記錄,還是太短了,所以PK把length最小值認為是3,必須3個以上字符的字符串出現重復才用distance+length記錄。那么,最大的length是多少呢?理論上當然可以很長很長,比如一個文件就是連續的0,這個重復字符串長度其實接近于這個文件的實際長度。但是PK把length的范圍做了限制,限定length的個數跟literal一樣,也只有256個,因為PK認為,一個重復字符串達到了256個已經很長了,概率非常小;另外,其實哪怕超過了256,我還是認為是一段256再加上另外一段,增加一個distance+length就行了嘛,并不影響結果。而且這樣做,我想同樣也考慮了硬件條件吧。

初看有點奇怪的在于,將literal和length二者合二為一,什么意思呢?就是對這兩種整數(literal本質上是一個字節)共用一個Huffman碼表,一會兒解釋為什么。PK對Huffman的理解我覺得達到了爐火純青的地步,前面已經看到,后面還會看到。他認為Huffman編碼的輸入反正說白了就是一個集合的元素就行,無論這個元素是啥,所以多個集合看做一個集合當作Huffman編碼的輸入沒啥問題。literal用整數0-255表示,256是一個結束標志,解碼以后結果是256表示解碼結束;從257開始表示length,所以257這個數表示length=3,258這個數表示length=4等等,但PK也不是一直這么一一對應,和distance一樣,也是把length(總共256個值)劃分為29個區間,其結果如下圖:

其中的含義和distance類似,不再贅述,所以literal/length這個Huffman編碼的輸入元素一共285個,其中256表示解碼結束標志。為什么要把二者合二為一呢?因為當解碼器接收到一個比特流的時候,首先可以按照literal/length這個碼表來解碼,如果解出來是0-255,就表示未匹配字符,如果是256,那自然就結束,如果是257-285之間,則表示length,把后面擴展比特加上形成length后,后面的比特流肯定就表示distance,因此,實際上通過一個Huffman碼表,對各類情況進行了統一,而不是通過加一個什么標志來區分到底是literal還是重復字符串。

好了,理解了上面的過程,就理解了ZIP壓縮的第二步,第一步是LZ編碼,第二步是對LZ編碼后結果(literal、distance、length)進行的再編碼,因為literal/length是一個碼表,我稱其為Huffman碼表1,distance那個碼表稱為Huffman碼表2。前面我們已經分析了,Huffman碼樹用一個碼字長度序列表示,稱為CL(Code Length),記錄兩個碼表的碼字長度序列分別記為CL1、CL2。碼樹記錄下來,對literal/length的編碼比特流稱為LIT比特流;對distance的編碼比特流稱為DIST比特流。

按照上面的方法,LZ的編碼結果就變成四塊:CL1、CL2、LIT比特流、DIST比特流。CL1、CL2是碼字長度的序列,這個序列說白了就是一堆正整數,因此,PK繼續深挖,認為這個序列還應該繼續壓縮,也就是說,對碼表進行壓縮。

?

7、ZIP中對CL進行再次壓縮的方法

這里仍然沿用Huffman的想法,因為CL也是一堆整數,那么當然可以再次應用Huffman編碼。不過在這之前,PK對CL序列進行了一點處理。這個處理也是很精巧的。

CL序列表示一系列整數對應的碼字長度,對于literal/length來說,總共有0-285這么多符號,所以這個序列長度為286,每個符號都有一個碼字長度,當然,這里面可能會出現大段連續的0,因為某些字符或長度不存在,尤其是對英文文本編碼的時候,非ASCII字符就根本不會出現,length較大的值出現概率也很小,所以出現大段的0是很正常的;對于distance也類似,也可能出現大段的0。PK于是先進行了一下游程編碼。在說什么是游程編碼之前,我們談談PK對CL序列的認識。

literal/length的編碼符號總共286個(回憶:256個Literal+1個結束標志+29個length區間),distance的編碼符號總共30個(回憶:30個區間),所以這顆碼樹不會特別深,Huffman編碼后的碼字長度不會特別長,PK認為最長不會超過15,也就是樹的深度不會超過15,這個是否是理論證明我還沒有分析,有興趣的同學可以分析一下。因此,CL1和CL2這兩個序列的任意整數值的范圍是0-15。0表示某個整數沒有出現(比如literal=0x12, length Code=8, distance Code=15等等)。

什么叫游程呢?就是一段完全相同的數的序列。什么叫游程編碼呢?說起來原理更簡單,就是對一段連續相同的數,記錄這個數一次,緊接著記錄出現了多少個即可。David的書中舉了這個例子,比如CL序列如下:

4, 4, 4, 4, 4, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2
那么,游程編碼的結果為:

4, 16, 01(二進制), 3, 3, 3, 6, 16, 11(二進制), 16, 00(二進制), 17,011(二進制), 2, 16, 00(二進制)
這是什么意思呢?因為CL的范圍是0-15,PK認為重復出現2次太短就不用游程編碼了,所以游程長度從3開始。用16這個特殊的數表示重復出現3、4、5、6個這樣一個游程,分別后面跟著00、01、10、11表示(實際存儲的時候需要低比特優先存儲,需要把比特倒序來存,博文的一些例子有時候會忽略這點,實際寫程序的時候一定要注意,否則會得到錯誤結果)。于是4,4,4,4,4,這段游程記錄為4,16,01,也就是說,4這個數,后面還會連續出現了4次。6,16,11,16,00表示6后面還連續跟著6個6,再跟著3個6;因為連續的0出現的可能很多,所以用17、18這兩個特殊的數專門表示0游程,17后面跟著3個比特分別記錄長度為3-10(總共8種可能)的游程;18后面跟著7個比特表示11-138(總共128種可能)的游程。17,011(二進制)表示連續出現6個0;18,0111110(二進制)表示連續出現62個0??傊涀?#xff0c;0-15是CL可能出現的值,16表示除了0以外的其它游程;17、18表示0游程。因為二進制實際上也是個整數,所以上面的序列用整數表示為:

4, 16, 1, 3, 3, 3, 6, 16, 3, 16, 0, 17, 3, 2, 16, 0

我們又看到了一串整數,這串整數的值的范圍是0-18。這個序列稱為SQ(Sequence的意思)。因為有兩個CL1、CL2,所以對應的有兩個SQ1、SQ2。

針對SQ1、SQ2,PK用了第三個Huffman碼表來對這兩個序列進行編碼。通過統計各個整數(0-18范圍內)的出現次數,按照相同的思路,對SQ1和SQ2進行了Huffman編碼,得到的碼流記為SQ1 bits和SQ2 bits。同時,這里又需要記錄第三個碼表,稱為Huffman碼表3。同理,這個碼表也用相同的方法記錄,也等效為一個碼長序列,稱為CCL,因為至多有0-18個,PK認為樹的深度至多為7,于是CCL的范圍是0-7。

當得到了CCL序列后,PK決定不再折騰,對這個序列用普通的3比特定長編碼記錄下來即可,即000代表0,111代表7。但實際上還有一點小折騰,就是最后這個序列如果全部記錄,那就需要19*3=57個比特,PK認為CL序列里面CL范圍為0-15,特殊的幾個值是16、17、18,如果把CCL序列位置置換一下,把16、17、18這些放前面,那么這個CCL序列就很可能最后面跟著一串0(因為CL=14,15這些很可能沒有),所以最后還引入了一個置換,其示意圖如下,分別表示置換前的CCL序列和置換后的CCL??梢钥闯?#xff0c;16、17、18對應的CCL被放到了前面,這樣如果尾部出現了一些0,就只需要記錄CCL長度即可,后面的0不記錄??梢岳^續節省一些比特,不過這個例子尾部置換后只有1個0:

不過粗看起來,這個置換效果并不好,我一開始接觸這個置換的時候,我覺得應該按照16、17、18、0、1、2、3、。。。這樣的順序來存儲,如果按照我理解的,那么置換后的結果如下:

2、4、0、4、5、5、1、5、0、6、0、0、0、0、0、0、0、0、0

這樣后面的一大串0直接截斷,比PK的方法更短。但PK卻按照上面的順序。我總是認為,我覺得牛人可能出錯了的時候,往往是我自己錯了,所以我又仔細想了一下,上面的順序特點比較明顯,直觀上看,PK認為CL為0和中間的值出現得比較多(放在了前面),但CL比較小的和比較大的出現得比較少(1、15、2、14這些放在了后面,你看,后面交叉著放),在文件比較小的時候,這種方法效果不算好,上面就是一個典型的例子,但文件比較大了以后,CL1、CL2碼樹比較大,碼字長度普遍比較長,大部分很可能接近于中間值,那么這個時候PK的方法可能就體現出優勢了。不得不說,對一個算法或者數據結構的優化程度,簡直完全取決于程序員對那個東西細節的理解的深度。當我仔細研究了ZIP壓縮算法的過程之后,我對PK這種深夜埋頭冥思苦想的大牛佩服得五體投地。

到此為止,ZIP壓縮算法的結果已經完畢。這個算法命名為Deflate算法??偨Y一下其編碼流程為:

?

8、Deflate壓縮數據格式

ZIP的格式實際上就是Deflate壓縮碼流外面套了一層文件相關的信息,這里先介紹Deflate壓縮碼流格式。其格式為:

Header:3個比特,第一個比特如果是1,表示此部分為最后一個壓縮數據塊;否則表示這是.ZIP文件的某個中間壓縮數據塊,但后面還有其他數據塊。這是ZIP中使用分塊壓縮的標志之一;第2、3比特表示3個選擇:壓縮數據中沒有使用Huffman、使用靜態Huffman、使用動態Huffman,這是對LZ77編碼后的literal/length/distance進行進一步編碼的標志。我們前面分析的都是動態Huffman,其實Deflate也支持靜態Huffman編碼,靜態Huffman編碼原理更為簡單,無需記錄碼表(因為PK自己定義了一個固定的碼表),但壓縮率不高,所以大多數情況下都是動態Huffman。

HLIT:5比特,記錄literal/length碼樹中碼長序列(CL1)個數的一個變量。后面CL1個數等于HLIT+257(因為至少有0-255總共256個literal,還有一個256表示解碼結束,但length的個數不定)。

HDIST:5比特,記錄distance碼樹中碼長序列(CL2)個數的一個變量。后面CL2個數等于HDIST+1。哪怕沒有1個重復字符串,distance都為0也是一個CL。

HCLEN:4比特,記錄Huffman碼表3中碼長序列(CCL)個數的一個變量。后面CCL個數等于HCLEN+4。PK認為CCL個數不會低于4個,即使對于整個文件只有1個字符的情況。

接下來是3比特編碼的CCL,一共HCLEN+4個,用以構造Huffman碼表3;

接下來是對CL1(碼長)序列經過游程編碼(SQ1:縮短的整數序列)后,并對SQ1繼續用Huffman編碼后的比特流。包含HLIT+257個CL1,其解碼碼表為Huffman碼表3,用以構造Huffman碼表1;

接下來是對CL2(碼長)序列經過游程編碼(SQ2:縮短的整數序列)后,并對SQ2繼續用Huffman編碼后的比特流。包含HDIST+1個CL2,其解碼碼表為Huffman碼表3,用于構造Huffman碼表2;

總之,上面的數據都是為了構造LZ解碼需要的2個Huffman碼表。

接下來才是經過Huffman編碼的壓縮數據,解碼碼表為Huffman碼表1和碼表2。
最后是數據塊結束標志,即literal/length這個碼表輸入符號位256的編碼比特。
對倒數第1、2內容塊進行解碼時,首先利用Huffman碼表1進行解碼,如果解碼所得整數位于0-255之間,表示literal未匹配字符,接下來仍然利用Huffman碼表1解碼;如果位于257-285之間,表示length匹配長度,之后需要利用Huffman碼表2進行解碼得到distance偏移距離;如果等于256,表示數據塊解碼結束。

?

9、ZIP文件格式解析

?上面各節對ZIP的原理進行了分析,這一節我們來看一個實際的例子,為了更好地描述,我們盡量把這個例子舉得簡單一些。下面是我隨便從一本書拷貝出來的一段較短的待壓縮的英文文本數據:

As mentioned above,there are many kinds of wireless systems other than cellular.

這段英文文本長度為80字節。經過ZIP壓縮后,其內容如下:

可以看到,第1、2字節就是PK??粗趺幢仍倪€長,這怎么叫壓縮?實際上,這里面大部分內容是ZIP的文件標記開銷,真正壓縮的內容(也就是我們前面提到的Deflate數據,劃線部分都是ZIP文件開銷)其實肯定要比原文短(否則ZIP不會啟用壓縮),我們這個例子是個短文本,但對于更長的文本而言,那ZIP文件總體長度肯定是要短于原始文本的。上面的這個ZIP文件,可以看到好幾個以PK開頭的區域,也就是不同顏色的劃線區域,這些其實都是ZIP文件本身的開銷。

所以,我們首先來看一看ZIP的格式,其格式定義為:

[local file header 1]
[file data 1]
[data descriptor 1]
..........
[local file header n]
[file data n]
[data descriptor n]
[archive decryption header]?
[archive extra data record]?
[central directory]
[zip64 end of central directory record]
[zip64 end of central directory locator]?
[end of central directory record]
local file header+file data+data descriptor這是一段ZIP壓縮數據,在一個ZIP文件里,至少有一段,至多那就不好說了,假如你要壓縮的文件一共有10個,那這個地方至少會有10段,ZIP對每個文件進行了獨立壓縮,RAR在此進行了改進,將多個文件聯合起來進行壓縮,提高了壓縮率。local file header的格式如下:

可見,起始的4個字節就是0x50(P)、0x4B(K)、0x03、0x04,因為是低字節優先,所以Signature=0x03044B50.接下來的內容按照上面的格式解析,十分簡單,這個區域在上面ZIP數據的那個圖里面是紅色劃線區域,之后則是壓縮后的Deflate數據。在文件的尾部,還有ZIP尾部數據,上面這個例子包含了central directory和end of central directory record,一般這兩部分也是必須的。central directory以0x50、0x4B、0x01、0x02開頭;end of central directory record以0x50、0x4B、0x05、0x06開頭,其含義比較簡單,分別對應于上面ZIP數據那個圖的藍色和綠色部分,下面是兩者的格式:

end of central directory record格式:

這幾張圖是我從網上找的,寫得比較清晰。對于其中的含義,解釋起來也比較簡單,我分析的結果如下:注意ZIP采用的低字節優先,在一個字節里面低位優先,需要反過來看。

Local File Header: (38B,304b)
00001010110100101100000000100000 (signature)
0000000000010100 (version:20)
0000000000000000 (generalBitFlag)
0000000000001000 (compressionMethod:8)
0100110110001110 (lastModTime:19854)
0100010100100101 (lastModDate:17701)
01010100101011010100001100111100 (CRC32)
00000000000000000000000001001000 (compressedSize:72)
00000000000000000000000001010000 (uncompressedSize:80)
0000000000001000 (filenameLength:8)
0000000000000000 (extraFieldLength:0)
0010101010100110110011100010111001110100001011100001111000101110 (fileName:Test.txt)
?(extraField)


Central File Header: (54B,432b)
00001010110100101000000001000000 (signature)
0000000000010100 (versionMadeBy:20)
0000000000010100 (versionNeeded:20)
0000000000000000 (generalBitFlag)
0000000000001000 (compressionMethod:8)
0100110110001110 (lastModTime:19854)
0100010100100101 (lastModDate:17701)
01010100101011010100001100111100 (CRC32)
00000000000000000000000001001000 (compressedSize:72)
00000000000000000000000001010000 (uncompressedSize:80)
0000000000001000 (filenameLength:8)
0000000000000000 (extraFieldLength:0)
0000000000000000 (fileCommenLength:0)
0000000000000000 (diskNumberStart)
0000000000000001 (internalFileAttr)
10000001100000000000000000100000 (externalFileAttr)
00000000000000000000000000000000 (relativeOffsetLocalHeader)
0010101010100110110011100010111001110100001011100001111000101110 (fileName:Test.txt)
?(extraField)
?(fileComment)


end of Central Directory Record: (22B,176b)
00001010110100101010000001100000 (signature)
0000000000000000 (numberOfThisDisk:0)
0000000000000000 (numberDiskCentralDirectory:0)
0000000000000001 (EntriesCentralDirectDisk:1)
0000000000000001 (EntriesCentralDirect:1)
00000000000000000000000000110110 (sizeCentralDirectory:54)
00000000000000000000000001101110 (offsetStartCentralDirectory:110)
0000000000000000 (fileCommentLength:0)
?(fileComment)

Local File Header Length:304
Central File Header Length:432
End Central Directory Record Length:176

可見,開銷總的長度為38+54+22=114字節,整個文件長度為186字節,因此Deflate壓縮數據長度為72字節(576比特)。盡管這里看起來只是從80字節壓縮到72字節,那是因為這是一段短文本,重復字符串出現較少,但如果文本較長,那壓縮率就會增加,這里只是舉個例子。

下面對其中的關鍵部分,也就是Deflate壓縮數據進行解析。

?

10,Deflate解碼過程實例分析

我們按照ZIP格式把Deflate壓縮數據(72字節)提取出來,如下(每行8字節):

1010100001010011100010111011000000000001000001000011000010100010
1000101110101010011110110000000001100011101110000011100010100101
0101001111001100000010001101001010010010000101101010101100001101
1011110100011111100011101111111001110010011101110110011100010101
0010110100010100101100110001100100000100110111101101111000011101
0010001001100110111001000010011001101010101000110110000001110101
0100011010010011100010110111001000111101101001011100101010010111
0111000011111000011110000011010111001011011111111100100010001001
1010001100001110000010101010111101101010100101111101011111100000

Deflate格式除了上面的介紹,也可以參考RFC1951,解析如下:

Header:101, 第一個比特是1,表示此部分為最后一個壓縮數據塊;后面的兩個比特01表示采用動態哈夫曼、靜態哈夫曼、或者沒有編碼的標志,01表示采用動態Huffman;在RFC1951里面是這么說明的:

00 - no compression

01 - compressed with fixed Huffman codes

10 - compressed with dynamic Huffman codes

11 - reserved (error)

注意,這里需要按照低比特在先的方式去看,否則會誤以為是靜態Huffman。

接下來:
HLIT:01000,記錄literal/length碼樹中碼長序列個數的一個變量,表示HLIT=2(低位在前),說明后面存在HLIT + 257=259個CL1,CL1即0-258被編碼后的長度,其中0-255表示Literal,256表示無效符號,257、258分別表示Length=3、4(length從3開始)。因此,這里實際上只出現了兩種重復字符串的長度,即3和4?;仡欉@個圖可以更清楚:

繼續:
HDIST:01010,記錄distance碼樹中碼長序列個數的一個變量,表示HDIST=10,說明后面存在HDIST+1=11個CL2,CL2即Distance Code=0-10被編碼的長度。

繼續:

HCLEN:0111,記錄Huffman碼樹3中碼長序列個數的一個變量,表示HCLEN=14(1110二進制),即說明緊接著跟著HCLEN+4=18個CCL,前面已經分析過,CCL記錄了一個Huffman碼表,這個碼表可以用一個碼長序列表示,根據這個碼長序列可以得到碼表。于是接下來我們把后面的18*3=54個比特拷貝出來,上面的碼流目前解析為下面的結果:

101(Header) 01000(HLIT) 01010(HDIST) 0111(HCLEN)?
000 101 110 110 000 000 000 010 000 010 000 110 000 101 000 101 000 101 (CCL)
110101010011110110000000001100011101110000011100010100101
0101001111001100000010001101001010010010000101101010101100001101
1011110100011111100011101111111001110010011101110110011100010101
0010110100010100101100110001100100000100110111101101111000011101
0010001001100110111001000010011001101010101000110110000001110101
0100011010010011100010110111001000111101101001011100101010010111
0111000011111000011110000011010111001011011111111100100010001001
1010001100001110000010101010111101101010100101111101011111100000

標準的CCL長度為19(回憶一下:CCL范圍為0-18,按照整數大小排序記錄各自的碼字長度),因此最后一個補0。得到序列:

000 101 110 110 000 000 000 010 000 010 000 110 000 101 000 101 000 101 000

其長度分別為(低位在前):
0、5、3、3、0、0、0、2、0、2、0、3、0、5、0、5、0、5、0
前面已經分析過,這個CCL序列實際上是經過一次置換操作得到的,需要進行相反的置換,置換后為:

3、5、5、5、3、2、2、0、0、0、0、0、0、0、0、0、0、5、3
這個就是對應于0-18的碼字長度序列。
根據Deflate樹的構造方式,得到下面的碼表(Huffman碼表3):

00????? <-->?? 5
01????? <-->?? 6
100???? <-->? 0
101???? <-->? 4
110???? <-->? 18
11100?? <-->1
11101?? <-->2
11110?? <-->3
11111?? <-->17

接下來就是CL1序列,按照前面的指示,一共有259個,分別對應于literal/length:0-258對應的碼字長度序列,我們隊跟著CCL后面的比特按照上面獲得的碼表進行逐步解碼,在解碼之前,實際上并不知道CL1的比特流長度有多少,需要根據259這個數字來判定,解完了259個整數,表明解析CL1完畢:

101(Header) 01000(HLIT) 01010(HDIST) 0111(HCLEN)?
000 101 110 110 000 000 000 010 000 010 000 110 000 101 000 101 000 101 (CCL)

110(18)1010100(7比特,記錄連續的11-138個0,此處一共0010101b=21,即記錄21+11=32個0)

11110(3)110(18)0000000(7比特,記錄連續的11-138個0,此處為全0,即記錄0+11=11個0)

01(6)100(0)01(6)110(18)1110000(7比特,記錄連續的11-138個0,此處為111b=7,即記錄7+11=18個0)

01(6)110(18)0010100(7比特,記錄連續的11-138個0,此處為10100b=20,即記錄20+11=31個0)

101(4)01(6)01(6)00(5)11110(3)01(6)100(0)00(5)00(5)100(0)01(6)101(4)

00(5)101(4)00(5)100(0)100(0)00(5)101(4)101(4)01(6)01(6)01(6)100(0)

00(5)110(18)1101111(7比特,記錄連續的11-138個0,此處為1111011b=123,即記錄123+11=134個0)

統計一下,上面已經解了32+11+18+31+134+30=256個數了,因為總共259個,還差三個:

01(6)00(5)01(6)

好了,CL1比特流解析完畢了,得到的CL1碼長序列為:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?3?0 0 0 0 0 0 0?
0 0 0 0 6 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0?
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 6 6 5 3 6 0 5 5 0 6 4 5 4 5 0 0 5 4 4 6 6 6?
0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0?6 5 6

總共259個,每行40個。根據這個序列,同樣按照Deflate樹構造方法,得到literal/length碼表(Huffman碼表1)為:

000???? --> (System.Char)(看前面的CL1序列,空格對應的ASCII為0x20=32,碼字長度3,即上面序列中第一個3)
001???? -->e(System.Char)
0100??? -->a(System.Char)
0101??? -->l(System.Char)
0110??? -->n(System.Char)
0111??? -->s(System.Char)
1000??? -->t(System.Char)
10010?? -->d(System.Char)
10011?? -->h(System.Char)
10100?? -->i(System.Char)
10101?? -->m(System.Char)
10110?? -->o(System.Char)
10111?? -->r(System.Char)
11000?? -->y(System.Char)
11001?? -->3(System.Int32)(看前面的CL1序列,對應257,碼字長度5)
110100? -->,(System.Char)
110101? -->.(System.Char)
110110? -->A(System.Char)
110111? -->b(System.Char)
111000? -->c(System.Char)
111001? -->f(System.Char)
111010? -->k(System.Char)
111011? -->u(System.Char)
111100? -->v(System.Char)
111101? -->w(System.Char)
111110? -->-1(System.Int32)(看前面的CL1序列,對應256,碼字長度6)
111111? -->4(System.Int32)(看前面的CL1序列,對應258,碼字長度6)

可以看出,碼表里存在兩個重復字符串長度3和4,當解碼結果為-1(上面進行了處理,即256),或者說遇到111110的時候,表示Deflate碼流結束。

按照同樣的道理,對CL2序列進行解析,前面已經知道HDIST=10,即有11個CL2整數序列:

11111(17)000(3比特,記錄連續的3-10個0,此處為0,即記錄3個0)

11101(2)11111(17)100(3比特,記錄連續的3-10個0,此處為001b=1,即記錄4個0)

11100(1)100(0)11101(2)

已經結束,總共11個。

于是CL2序列為:

0 0 0 2 0 0 0 0 1 0 2

分別記錄的是distance碼為0-10的碼字長度,根據下面的對應關系,需要進行擴展:

比如,第1個碼長2記錄的是Code=3的長度,即Distance=4對應的碼字為:

10????? -->4(System.Int32)

第1個碼長1記錄的是Code=8的長度(碼字為0,擴展三位000-111),即Distance=17-24對應的碼字為(注意,低比特優先):

0 000??? -->17(System.Int32)
0 100??? -->18(System.Int32)
0 010??? -->19(System.Int32)
0 110??? -->20(System.Int32)
0 001??? -->21(System.Int32)
0 101??? -->22(System.Int32)
0 011??? -->23(System.Int32)
0 111??? -->24(System.Int32)

注意,擴展的時候還是低比特優先。

最后1個碼長2記錄的是Code=10的長度(其實是碼字:11,擴展四位0000-1111),即Distance=33-48對應的碼字為:

11 0000? -->33(System.Int32)
11 1000? -->34(System.Int32)
11 0100? -->35(System.Int32)
11 1100? -->36(System.Int32)
11 0010? -->37(System.Int32)
11 1010? -->38(System.Int32)
11 0110? -->39(System.Int32)
11 1110? -->40(System.Int32)
11 0001? -->41(System.Int32)
11 1001? -->42(System.Int32)
11 0101? -->43(System.Int32)
11 1101? -->44(System.Int32)
11 0011? -->45(System.Int32)
11 1011? -->46(System.Int32)
11 0111? -->47(System.Int32)
11 1111? -->48(System.Int32)

至此為止,Huffman碼表1、Huffman碼表2已經還原出來,接下來是對LZ壓縮所得到的literal、distance、length進行解碼,目前剩余的比特流如下,先按照Huffman碼表1解碼,如果解碼結果是長度(>256),則接下來按照Huffman碼表2解碼,逐步解碼即可:

[As ]:110110(A)0111(s)000(空格)

[mentioned ]:10101(m)001(e)0110(n)1000(t)10100(i)10110(o)0110(n)001(e)10010(d)000(空格)

[above,]:0100(a)110111(b)10110(o)111100(v)001(e)110100(,)

[there ]:1000(t)10011(h)001(e)10111(r)001(e)000(空格)

[are ]:0100(a)11001(長度3,表示下一個需要用Huffman解碼)10(Distance=4,即重復字符串為re空格)

[many ]:10101(m)0100(a)0110(n)11000(y)000(空格)

[kinds ]:111010(k)10100(i)0110(n)10010(d)0111(s)000(空格)

[of ]:10110(o)111001(f)000(空格)

[wireless ]:111101(w)10100(i)10111(r)001(e)0101(l)001(e)0111(s)0111(s)000(空格)

[systems o]:0111(s)11000(y)0111(s)1000(t)001(e)10101(m)11001(長度指示=3,接下來根據distance解碼)0110(Distance=20,即重復字符串為s o)

[ther ]:111111(長度指示=4,接下來根據distance解碼)111001(Distance=42,即重復字符串為ther)000(空格)

[than ]:1000(t)10011(h)0100(a)0110(n)000(空格)

[cellular.]:111000(c)001(e)0101(l)0101(l)111011(u)0101(l)0100(a)10111(r)110101(.)

[256,結束標志]111110(結束標志)0000(字節補齊的0)

于是解壓縮結果為:

As mentioned above,there are many kinds of wireless systems other than cellular.

再來回顧我們的解碼過程:

譯碼過程:
1、根據HCLEN得到截尾信息,并參照固定置換表,根據CCL比特流得到CCL整數序列;
2、根據CCL整數序列構造出等價于CCL的二級Huffman碼表3;
3、根據二級Huffman碼表3對CL1、CL2比特流進行解碼,得到SQ1整數序列,SQ2整數序列;
4、根據SQ1整數序列,SQ2整數序列,利用游程編碼規則得到等價的CL1整數序列、CL2整數序列;
5、根據CL1整數序列、CL2整數序列分別構造兩個一級Huffman碼表:literal/length碼表、distance碼表;
6、根據兩個一級Huffman碼表對后面的LZ壓縮數據進行解碼得到literal/length/distance流;
7、根據literal/length/distance流按照LZ規則進行解碼。

Deflate碼流長度總共為72字節=576比特,其中:

3比特Header;

5比特HLIT;

5比特HDIST;

4比特HCLEN;

54比特CCL序列碼流;

133比特CL1序列碼流;

34比特CL2序列碼流;

338比特LZ壓縮后的literal/length/distance碼流。

11、ZIP的其它說明

上面各個環節已經詳細分析了ZIP壓縮的過程以及解碼流程,通過對一個實例的解壓縮過程分析,可以徹底地掌握ZIP壓縮和解壓縮的原理和過程。還有一些情況需要說明:

(1)上面的算法復雜度主要在于壓縮一端,因為需要統計literal/length/distance,創建動態Huffman碼表,相反解壓只需要還原碼表后,逐比特解析即可,這也是壓縮軟件的一個典型特點,解壓速度遠快于壓縮速度。

(2)上面我們分析了動態Huffman,對于LZ壓縮后的literal/length/distance,也可以采用靜態Huffman編碼,這主要取決于ZIP在壓縮中看哪種方式更節省空間,靜態Huffman編碼不需要記錄碼表,因為這個碼表是固定的,在RFC1951里面也有說明。對于literal/length碼表來說,需要對0-285進行編碼,其碼表為:

對于Distance來說,需要對Code=0-29的數進行編碼,則直接采用5比特表示。Distance和動態Huffman一樣,在此基礎上進行擴展。

(3)ZIP中使用的LZ77算法是一種改進的LZ77。主要區別有兩點:

1)標準LZ77在找到重復字符串時輸出三元組(length, distance, 下一個未匹配的字符)(有興趣可以關注LZ77那篇論文);Deflate在找到重復字符串時僅輸出雙元組(length, distance)。
2)標準LZ77使用”貪婪“的方式解析,尋找的都是最長匹配字符串。Deflate中不完全如此。David Salomon的書里給了一個例子:

對于上面這個例子,標準LZ77在滑動窗口中查找最長匹配字符串,找到的是"the"與前面的there的前三個字符匹配,這種貪婪解析方式邏輯簡單,但編碼效率不一定最高。Deflate則不急于輸出,跳過t繼續往后查看,發現"th ne"這5個字符存在重復字符串,因此,Deflate算法會選擇將t作為未匹配字符輸出,而對后面的匹配字符串用(length, distance)編碼輸出。顯然,這樣就提高了壓縮效率,因為標準的LZ77找到的重復字符串長度為3,而Deflate找到的是5。換句話說,Deflate算法并不是簡單的尋找最長匹配后輸出,而是會權衡幾種可行的編碼方式,用其中最高效的方式輸出。

?

12、總結

本篇博文對ZIP中使用的壓縮算法進行了詳細分析,從一個簡單地例子出發,一步步地分析了PK設計Deflate算法的思路。最后,通過一個實際例子,分析了其解壓縮流程??偟膩砜?#xff0c;ZIP的核心在于如何對LZ壓縮后的literal、length、distance進行Huffman編碼,以及如何以最小空間記錄Huffman碼表。整個過程充滿了對數據結構尤其是樹的深入優化利用。按照上面的分析,如果要對ZIP進行進一步改進,可以考慮的地方也有不少,典型的有:

(1)擴大LZ編碼的滑動窗口的大小;

(2)將Huffman編碼改進為算術編碼等壓縮率更高的方法,畢竟,Huffman的碼字長度必須為整數,這就從理論上限制了它的壓縮率只能接近于理論極限,但難以達到。我記得在JPEG圖像編碼領域,以前的JPEG采用了DCT變換編碼+Huffman的方式,現在JPEG2000將其改為小波變換+算數編碼,所以數據壓縮也可以嘗試類似的思路;

(3)將多個文件進行合并壓縮,ZIP中,不同的文件壓縮過程沒有關系,獨立進行,如果將它們合并起來一起進行壓縮,壓縮率可以得到進一步提高。

?

描述分析有誤的地方,敬請指正。針對數據壓縮相關的話題,后續會對HBase列壓縮等等進行分析,看看ZIP這種文件壓縮和HBase這種數據庫數據壓縮的區別和聯系。

總結

以上是生活随笔為你收集整理的文件压缩算法详细分析(ZIP)及解压实例解释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久午夜无码鲁丝片 | 亚洲午夜久久久影院 | 东北女人啪啪对白 | 精品人妻人人做人人爽夜夜爽 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 性欧美熟妇videofreesex | 理论片87福利理论电影 | 2019午夜福利不卡片在线 | 无码一区二区三区在线观看 | 中国女人内谢69xxxxxa片 | 久久久久久av无码免费看大片 | 无码免费一区二区三区 | 亚洲人成影院在线无码按摩店 | 日韩欧美中文字幕公布 | 无码av最新清无码专区吞精 | 人妻少妇精品无码专区二区 | 我要看www免费看插插视频 | 国产sm调教视频在线观看 | 乱人伦人妻中文字幕无码久久网 | 天天燥日日燥 | 精品久久久中文字幕人妻 | 无码人妻精品一区二区三区下载 | 天堂久久天堂av色综合 | 特黄特色大片免费播放器图片 | 人妻插b视频一区二区三区 | 中文字幕无码av波多野吉衣 | 精品无码一区二区三区爱欲 | 亚洲色欲久久久综合网东京热 | 日本丰满熟妇videos | 台湾无码一区二区 | 麻豆蜜桃av蜜臀av色欲av | 国产午夜手机精彩视频 | 久热国产vs视频在线观看 | 日韩精品a片一区二区三区妖精 | 撕开奶罩揉吮奶头视频 | 六十路熟妇乱子伦 | 日本又色又爽又黄的a片18禁 | 性生交片免费无码看人 | 又紧又大又爽精品一区二区 | 国产免费无码一区二区视频 | 中文字幕 亚洲精品 第1页 | 爆乳一区二区三区无码 | 无人区乱码一区二区三区 | 国产真人无遮挡作爱免费视频 | 欧美喷潮久久久xxxxx | 一本色道婷婷久久欧美 | 欧美老人巨大xxxx做受 | 精品无码一区二区三区爱欲 | 天天摸天天透天天添 | 亚洲国产av精品一区二区蜜芽 | 激情五月综合色婷婷一区二区 | 亚洲一区二区三区 | 亚洲色无码一区二区三区 | 国内揄拍国内精品少妇国语 | 一本久道久久综合狠狠爱 | 中文字幕精品av一区二区五区 | 亚洲男人av香蕉爽爽爽爽 | 无码人妻出轨黑人中文字幕 | 乱中年女人伦av三区 | 美女黄网站人色视频免费国产 | 欧美日韩一区二区综合 | 亚洲一区av无码专区在线观看 | 国产av久久久久精东av | 最近免费中文字幕中文高清百度 | 国产成人久久精品流白浆 | 久精品国产欧美亚洲色aⅴ大片 | 天堂亚洲2017在线观看 | 偷窥日本少妇撒尿chinese | 18无码粉嫩小泬无套在线观看 | 色欲久久久天天天综合网精品 | 国产精品高潮呻吟av久久4虎 | 国产av一区二区精品久久凹凸 | 无码人妻丰满熟妇区毛片18 | 精品国产成人一区二区三区 | 噜噜噜亚洲色成人网站 | 无码任你躁久久久久久久 | 美女极度色诱视频国产 | 国产99久久精品一区二区 | 亚洲中文字幕在线观看 | 亚洲小说春色综合另类 | 特黄特色大片免费播放器图片 | 国产免费观看黄av片 | 最新国产乱人伦偷精品免费网站 | 亚洲一区二区三区偷拍女厕 | 免费男性肉肉影院 | 无码精品人妻一区二区三区av | 美女扒开屁股让男人桶 | 国产亚洲欧美日韩亚洲中文色 | 我要看www免费看插插视频 | 欧美熟妇另类久久久久久多毛 | 日韩av无码中文无码电影 | 国内精品人妻无码久久久影院蜜桃 | 国产精品毛片一区二区 | 亚洲欧美精品aaaaaa片 | av在线亚洲欧洲日产一区二区 | 亚洲 激情 小说 另类 欧美 | 无码精品人妻一区二区三区av | 国产精品无码一区二区三区不卡 | 一个人看的www免费视频在线观看 | 久久亚洲精品中文字幕无男同 | 中文字幕色婷婷在线视频 | 亚洲七七久久桃花影院 | 青春草在线视频免费观看 | 成熟妇人a片免费看网站 | 成人试看120秒体验区 | 免费播放一区二区三区 | 欧美日韩色另类综合 | 性欧美牲交xxxxx视频 | 人妻体内射精一区二区三四 | 青草视频在线播放 | 久久国内精品自在自线 | 欧洲熟妇色 欧美 | 国产在线精品一区二区高清不卡 | 久久精品无码一区二区三区 | 国产精品嫩草久久久久 | 欧美日韩在线亚洲综合国产人 | 亚洲精品午夜无码电影网 | 无码人妻少妇伦在线电影 | 在线观看国产一区二区三区 | 国产精品欧美成人 | 欧美午夜特黄aaaaaa片 | 中文字幕无码人妻少妇免费 | 国产美女精品一区二区三区 | 国产亚av手机在线观看 | 久久99精品久久久久婷婷 | 亚洲欧洲中文日韩av乱码 | 精品人妻人人做人人爽夜夜爽 | 欧美阿v高清资源不卡在线播放 | 啦啦啦www在线观看免费视频 | 男人和女人高潮免费网站 | 97人妻精品一区二区三区 | 正在播放东北夫妻内射 | 亚洲精品www久久久 | 国产无遮挡又黄又爽免费视频 | 欧美三级a做爰在线观看 | 亚洲一区二区三区国产精华液 | 小sao货水好多真紧h无码视频 | 日韩成人一区二区三区在线观看 | 亚洲熟妇色xxxxx欧美老妇y | 国产成人无码一二三区视频 | 无码人妻久久一区二区三区不卡 | 131美女爱做视频 | 四十如虎的丰满熟妇啪啪 | 精品亚洲成av人在线观看 | 在线天堂新版最新版在线8 | 午夜免费福利小电影 | 狠狠躁日日躁夜夜躁2020 | 色综合久久中文娱乐网 | 一本大道久久东京热无码av | 欧美自拍另类欧美综合图片区 | 色综合久久久久综合一本到桃花网 | 欧美精品国产综合久久 | 人妻少妇精品视频专区 | 婷婷色婷婷开心五月四房播播 | 色婷婷久久一区二区三区麻豆 | 久久国语露脸国产精品电影 | 熟女少妇在线视频播放 | 免费人成在线观看网站 | 俺去俺来也在线www色官网 | 宝宝好涨水快流出来免费视频 | 久久精品视频在线看15 | 国产做国产爱免费视频 | 欧美三级a做爰在线观看 | 日韩精品久久久肉伦网站 | 精品亚洲韩国一区二区三区 | 极品嫩模高潮叫床 | 天堂在线观看www | 波多野42部无码喷潮在线 | 熟女少妇在线视频播放 | 扒开双腿疯狂进出爽爽爽视频 | 国产成人无码av片在线观看不卡 | 久久国产精品偷任你爽任你 | 麻豆蜜桃av蜜臀av色欲av | 人妻夜夜爽天天爽三区 | 国产又爽又猛又粗的视频a片 | 欧美刺激性大交 | 国产精品无码成人午夜电影 | 东京一本一道一二三区 | 亚洲 欧美 激情 小说 另类 | 扒开双腿吃奶呻吟做受视频 | 成人无码精品1区2区3区免费看 | 成人影院yy111111在线观看 | 亚洲va中文字幕无码久久不卡 | 成人免费视频视频在线观看 免费 | 无码人妻精品一区二区三区下载 | 久久久久久久人妻无码中文字幕爆 | а天堂中文在线官网 | 99久久人妻精品免费一区 | 熟妇人妻中文av无码 | 又大又硬又爽免费视频 | 精品一二三区久久aaa片 | 一本精品99久久精品77 | 人人妻人人澡人人爽欧美一区九九 | 亚洲成av人在线观看网址 | 国产精品美女久久久久av爽李琼 | 久久精品女人的天堂av | 日日天干夜夜狠狠爱 | 亚洲小说图区综合在线 | 欧美xxxx黑人又粗又长 | 黄网在线观看免费网站 | 奇米影视888欧美在线观看 | 久久精品成人欧美大片 | 婷婷五月综合缴情在线视频 | 国产免费观看黄av片 | а天堂中文在线官网 | 亚欧洲精品在线视频免费观看 | 国产一区二区三区影院 | 啦啦啦www在线观看免费视频 | 久久99久久99精品中文字幕 | 国产97在线 | 亚洲 | 99久久亚洲精品无码毛片 | 成人三级无码视频在线观看 | 久久伊人色av天堂九九小黄鸭 | 免费男性肉肉影院 | 国产精品久久久久无码av色戒 | 成熟女人特级毛片www免费 | 99久久人妻精品免费一区 | 久久综合色之久久综合 | 亚洲精品www久久久 | 亚欧洲精品在线视频免费观看 | 丰满少妇女裸体bbw | 东北女人啪啪对白 | 曰韩少妇内射免费播放 | 国产精品久久精品三级 | 成人免费视频在线观看 | 午夜理论片yy44880影院 | 午夜福利电影 | 免费网站看v片在线18禁无码 | 免费无码午夜福利片69 | 午夜性刺激在线视频免费 | a在线亚洲男人的天堂 | 成人性做爰aaa片免费看 | 中文字幕日韩精品一区二区三区 | 久久精品国产99精品亚洲 | 亚洲精品成人av在线 | 久久人人爽人人爽人人片ⅴ | 日日噜噜噜噜夜夜爽亚洲精品 | 国产麻豆精品精东影业av网站 | 午夜精品久久久久久久 | 97久久精品无码一区二区 | 全球成人中文在线 | 亚洲伊人久久精品影院 | 国产精品多人p群无码 | 久久伊人色av天堂九九小黄鸭 | 亚洲春色在线视频 | 四虎影视成人永久免费观看视频 | 国产午夜精品一区二区三区嫩草 | 国产午夜亚洲精品不卡 | 欧美真人作爱免费视频 | 国产特级毛片aaaaaa高潮流水 | 精品偷自拍另类在线观看 | 国产黄在线观看免费观看不卡 | 亚洲国产精品无码久久久久高潮 | 亚洲中文字幕久久无码 | 亚洲s色大片在线观看 | aⅴ在线视频男人的天堂 | 国产精品久久福利网站 | 欧美日韩在线亚洲综合国产人 | 国产无av码在线观看 | 亚洲国产精品美女久久久久 | 成人免费无码大片a毛片 | 一本色道久久综合亚洲精品不卡 | 成人亚洲精品久久久久软件 | 曰韩少妇内射免费播放 | 国产成人亚洲综合无码 | 欧洲vodafone精品性 | 国产成人综合色在线观看网站 | 99久久婷婷国产综合精品青草免费 | 最近免费中文字幕中文高清百度 | 国内综合精品午夜久久资源 | 亚洲s码欧洲m码国产av | 国产一区二区三区四区五区加勒比 | 欧美人与禽猛交狂配 | 亚洲va中文字幕无码久久不卡 | 少妇厨房愉情理9仑片视频 | 亚洲精品成a人在线观看 | 久久精品一区二区三区四区 | www国产亚洲精品久久久日本 | 国产艳妇av在线观看果冻传媒 | 无码人妻少妇伦在线电影 | 欧美成人家庭影院 | 亚洲七七久久桃花影院 | 一本久道久久综合婷婷五月 | 国产人成高清在线视频99最全资源 | 成人女人看片免费视频放人 | 高潮喷水的毛片 | 十八禁真人啪啪免费网站 | 免费无码午夜福利片69 | 乱人伦人妻中文字幕无码久久网 | 鲁大师影院在线观看 | 又湿又紧又大又爽a视频国产 | 亚洲a无码综合a国产av中文 | 国产香蕉尹人综合在线观看 | 天天av天天av天天透 | 精品久久8x国产免费观看 | 欧美性生交活xxxxxdddd | 成人片黄网站色大片免费观看 | 欧美午夜特黄aaaaaa片 | 在教室伦流澡到高潮hnp视频 | 内射巨臀欧美在线视频 | 久久国产劲爆∧v内射 | 亚洲区小说区激情区图片区 | 999久久久国产精品消防器材 | 中文字幕无码av激情不卡 | 欧美日本精品一区二区三区 | 四虎影视成人永久免费观看视频 | 亚洲爆乳精品无码一区二区三区 | 国产激情精品一区二区三区 | 亚洲综合无码一区二区三区 | 最近免费中文字幕中文高清百度 | 婷婷综合久久中文字幕蜜桃三电影 | 国内精品久久毛片一区二区 | 久久国产精品_国产精品 | 国产精品理论片在线观看 | 国产一区二区不卡老阿姨 | 97色伦图片97综合影院 | 久久精品国产日本波多野结衣 | 久久国产自偷自偷免费一区调 | 狂野欧美激情性xxxx | 人妻无码久久精品人妻 | 丰满人妻精品国产99aⅴ | 波多野结衣乳巨码无在线观看 | 波多野结衣一区二区三区av免费 | 黑人粗大猛烈进出高潮视频 | 最新国产麻豆aⅴ精品无码 | 亚洲国产av美女网站 | 成人免费视频视频在线观看 免费 | 少妇人妻偷人精品无码视频 | 日本一区二区更新不卡 | 色欲综合久久中文字幕网 | 精品国产一区二区三区四区 | 狠狠色噜噜狠狠狠狠7777米奇 | 无套内谢的新婚少妇国语播放 | 纯爱无遮挡h肉动漫在线播放 | 久久精品成人欧美大片 | av人摸人人人澡人人超碰下载 | 久久综合网欧美色妞网 | 草草网站影院白丝内射 | 亚洲国产欧美日韩精品一区二区三区 | 久久国产精品精品国产色婷婷 | 日韩少妇内射免费播放 | 亚洲の无码国产の无码影院 | 俺去俺来也www色官网 | 人人妻人人澡人人爽欧美一区九九 | 欧美日韩久久久精品a片 | 国产特级毛片aaaaaa高潮流水 | 国产做国产爱免费视频 | 中文字幕无码av激情不卡 | 久久99国产综合精品 | 国产在线无码精品电影网 | 国产区女主播在线观看 | 熟妇女人妻丰满少妇中文字幕 | 国内精品久久久久久中文字幕 | 女人和拘做爰正片视频 | 国产成人精品久久亚洲高清不卡 | 久久亚洲精品成人无码 | 一本色道婷婷久久欧美 | 丰满少妇熟乱xxxxx视频 | 东京无码熟妇人妻av在线网址 | 精品无人国产偷自产在线 | 国产猛烈高潮尖叫视频免费 | 我要看www免费看插插视频 | 大肉大捧一进一出视频出来呀 | 国产在线无码精品电影网 | 午夜熟女插插xx免费视频 | 性色av无码免费一区二区三区 | 国内揄拍国内精品人妻 | 免费无码一区二区三区蜜桃大 | 天天躁夜夜躁狠狠是什么心态 | 亚洲欧美精品aaaaaa片 | 午夜成人1000部免费视频 | 欧美 丝袜 自拍 制服 另类 | 国产办公室秘书无码精品99 | 在线看片无码永久免费视频 | 人妻无码αv中文字幕久久琪琪布 | 欧美精品无码一区二区三区 | 久久综合激激的五月天 | 67194成是人免费无码 | 久久亚洲a片com人成 | 成人精品一区二区三区中文字幕 | 国产精品久久久久久无码 | 婷婷综合久久中文字幕蜜桃三电影 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 成人精品天堂一区二区三区 | 精品国产成人一区二区三区 | 成人精品视频一区二区 | 亚洲呦女专区 | 亚洲一区二区三区香蕉 | 永久免费精品精品永久-夜色 | 日日碰狠狠躁久久躁蜜桃 | 综合激情五月综合激情五月激情1 | 亚洲色欲色欲天天天www | 国产精品无套呻吟在线 | 精品国产一区二区三区四区 | 精品乱子伦一区二区三区 | 激情内射亚州一区二区三区爱妻 | 国产亚洲精品久久久ai换 | 国产成人无码区免费内射一片色欲 | 亚洲国产精品毛片av不卡在线 | 1000部夫妻午夜免费 | 九月婷婷人人澡人人添人人爽 | av无码久久久久不卡免费网站 | 亚洲高清偷拍一区二区三区 | 国产在线aaa片一区二区99 | 国产亚洲精品久久久久久久久动漫 | 亚洲精品综合五月久久小说 | 内射爽无广熟女亚洲 | 久久久久人妻一区精品色欧美 | 伊人久久大香线蕉av一区二区 | 超碰97人人做人人爱少妇 | 国产精品手机免费 | 人人妻人人澡人人爽人人精品 | 97色伦图片97综合影院 | 暴力强奷在线播放无码 | 蜜臀aⅴ国产精品久久久国产老师 | 无套内谢的新婚少妇国语播放 | 中文字幕亚洲情99在线 | 国产乱子伦视频在线播放 | 国产成人无码区免费内射一片色欲 | 三上悠亚人妻中文字幕在线 | 蜜桃视频插满18在线观看 | 日本一区二区三区免费播放 | 久久久久人妻一区精品色欧美 | 欧美性猛交内射兽交老熟妇 | 学生妹亚洲一区二区 | 人人妻人人澡人人爽精品欧美 | 人人妻人人澡人人爽欧美精品 | 在线欧美精品一区二区三区 | 欧美人与禽zoz0性伦交 | 对白脏话肉麻粗话av | 18无码粉嫩小泬无套在线观看 | 超碰97人人做人人爱少妇 | 免费观看激色视频网站 | 伊人久久婷婷五月综合97色 | 奇米影视7777久久精品人人爽 | 成年美女黄网站色大免费全看 | 人人妻人人澡人人爽精品欧美 | 大地资源网第二页免费观看 | 国产精品va在线播放 | 欧美精品一区二区精品久久 | 精品久久久无码人妻字幂 | 欧美一区二区三区 | 国产又爽又黄又刺激的视频 | 四十如虎的丰满熟妇啪啪 | aⅴ亚洲 日韩 色 图网站 播放 | 成人影院yy111111在线观看 | 偷窥日本少妇撒尿chinese | 国产乱人伦av在线无码 | 亚洲中文字幕成人无码 | 天天躁日日躁狠狠躁免费麻豆 | 天天摸天天碰天天添 | 亚洲の无码国产の无码步美 | 色一情一乱一伦一区二区三欧美 | 在线看片无码永久免费视频 | 丰满肥臀大屁股熟妇激情视频 | 日本熟妇乱子伦xxxx | 性色av无码免费一区二区三区 | 免费看少妇作爱视频 | √天堂资源地址中文在线 | 永久免费观看国产裸体美女 | 国产精品久久国产精品99 | 国产精品怡红院永久免费 | 亚洲中文无码av永久不收费 | 国产在线aaa片一区二区99 | 久久久精品欧美一区二区免费 | 东京无码熟妇人妻av在线网址 | 一二三四在线观看免费视频 | 亚洲熟熟妇xxxx | 女人被男人躁得好爽免费视频 | 国产极品美女高潮无套在线观看 | 四十如虎的丰满熟妇啪啪 | 欧美成人家庭影院 | 国产精品久久久久久亚洲毛片 | 亚洲中文字幕va福利 | 无码av中文字幕免费放 | 人人澡人人妻人人爽人人蜜桃 | 国产乱人伦av在线无码 | 久久成人a毛片免费观看网站 | 亚洲区欧美区综合区自拍区 | 国产suv精品一区二区五 | 日韩人妻少妇一区二区三区 | 国产一区二区不卡老阿姨 | 久久久久99精品成人片 | 国产激情无码一区二区 | 人妻无码αv中文字幕久久琪琪布 | 一本久道高清无码视频 | 国产疯狂伦交大片 | av小次郎收藏 | 无码人妻出轨黑人中文字幕 | 高清国产亚洲精品自在久久 | 蜜桃视频插满18在线观看 | 国产一区二区三区日韩精品 | 欧美人妻一区二区三区 | 51国偷自产一区二区三区 | 国精产品一品二品国精品69xx | 欧美 日韩 亚洲 在线 | 少妇被粗大的猛进出69影院 | 色婷婷综合激情综在线播放 | 大肉大捧一进一出视频出来呀 | 人妻尝试又大又粗久久 | 国产精品久久久久久久影院 | 午夜精品久久久内射近拍高清 | 中文字幕无线码免费人妻 | 午夜男女很黄的视频 | 日本爽爽爽爽爽爽在线观看免 | 亚洲第一无码av无码专区 | 天堂一区人妻无码 | 国产亚洲视频中文字幕97精品 | 牲欲强的熟妇农村老妇女视频 | 色综合久久久无码中文字幕 | 少妇久久久久久人妻无码 | 漂亮人妻洗澡被公强 日日躁 | 超碰97人人做人人爱少妇 | 欧美人妻一区二区三区 | 日本一卡2卡3卡四卡精品网站 | 国产午夜精品一区二区三区嫩草 | 嫩b人妻精品一区二区三区 | 国产精品99爱免费视频 | 日韩精品无码一本二本三本色 | 亚洲国产精品毛片av不卡在线 | 亚洲精品欧美二区三区中文字幕 | 好男人www社区 | 国产亚洲欧美在线专区 | 少妇厨房愉情理9仑片视频 | 欧美人与禽猛交狂配 | 正在播放东北夫妻内射 | 疯狂三人交性欧美 | 国产卡一卡二卡三 | 特级做a爰片毛片免费69 | 久久99精品国产麻豆蜜芽 | 免费无码av一区二区 | 久久综合给合久久狠狠狠97色 | 又大又黄又粗又爽的免费视频 | 色综合天天综合狠狠爱 | 欧洲vodafone精品性 | 国产亚洲日韩欧美另类第八页 | 天天做天天爱天天爽综合网 | 午夜福利不卡在线视频 | 国产精品久久久久久亚洲毛片 | 国产精品毛片一区二区 | 成年女人永久免费看片 | 四虎永久在线精品免费网址 | 人妻少妇被猛烈进入中文字幕 | 国产亚洲视频中文字幕97精品 | 欧美喷潮久久久xxxxx | 色婷婷香蕉在线一区二区 | 四虎影视成人永久免费观看视频 | 中文字幕无码乱人伦 | 特大黑人娇小亚洲女 | 亚洲一区二区三区无码久久 | 中文精品无码中文字幕无码专区 | 日本乱人伦片中文三区 | 国产熟妇高潮叫床视频播放 | 精品乱码久久久久久久 | 人人超人人超碰超国产 | 特黄特色大片免费播放器图片 | 成人一区二区免费视频 | 曰本女人与公拘交酡免费视频 | 久久国产精品偷任你爽任你 | 无码毛片视频一区二区本码 | 亚洲一区av无码专区在线观看 | 国产乱子伦视频在线播放 | 丰满少妇女裸体bbw | 日日摸夜夜摸狠狠摸婷婷 | 亚洲经典千人经典日产 | 免费男性肉肉影院 | 亚洲熟妇色xxxxx欧美老妇y | 无遮挡啪啪摇乳动态图 | 中文精品无码中文字幕无码专区 | 伦伦影院午夜理论片 | 精品国产一区二区三区av 性色 | 76少妇精品导航 | 精品久久综合1区2区3区激情 | 久久久无码中文字幕久... | 亚洲熟熟妇xxxx | 久久精品国产一区二区三区肥胖 | 玩弄中年熟妇正在播放 | 亚洲乱亚洲乱妇50p | 娇妻被黑人粗大高潮白浆 | 国产激情一区二区三区 | 国产av剧情md精品麻豆 | 精品aⅴ一区二区三区 | 久久久久99精品国产片 | 亚洲天堂2017无码中文 | 国产乱人伦偷精品视频 | 久久久久国色av免费观看性色 | 高清不卡一区二区三区 | 性啪啪chinese东北女人 | 99久久人妻精品免费二区 | 久久精品无码一区二区三区 | 熟女少妇人妻中文字幕 | 97色伦图片97综合影院 | 99re在线播放 | 成人动漫在线观看 | 亚洲第一网站男人都懂 | 国产成人精品一区二区在线小狼 | 久久综合网欧美色妞网 | 亚洲精品久久久久久久久久久 | 蜜桃臀无码内射一区二区三区 | 国产高潮视频在线观看 | 亚洲无人区午夜福利码高清完整版 | 亚洲中文字幕在线观看 | 日本一区二区更新不卡 | 国产成人无码av在线影院 | 精品国产成人一区二区三区 | 国产精品无码永久免费888 | 亚洲一区二区三区四区 | 色欲久久久天天天综合网精品 | www国产亚洲精品久久久日本 | 日韩欧美成人免费观看 | 天堂а√在线地址中文在线 | 国产在线精品一区二区三区直播 | 亚洲精品久久久久久一区二区 | 国产精品毛片一区二区 | 欧美 日韩 亚洲 在线 | 丝袜美腿亚洲一区二区 | 青草视频在线播放 | 免费网站看v片在线18禁无码 | 成人性做爰aaa片免费看不忠 | 久久国产精品精品国产色婷婷 | 日本熟妇乱子伦xxxx | 亚洲欧美国产精品久久 | 国产午夜精品一区二区三区嫩草 | 精品国产麻豆免费人成网站 | 欧美 亚洲 国产 另类 | 亚洲午夜久久久影院 | 国产精品怡红院永久免费 | 中文字幕亚洲情99在线 | 强奷人妻日本中文字幕 | 成年女人永久免费看片 | 精品成人av一区二区三区 | 日本高清一区免费中文视频 | 波多野结衣av在线观看 | 丰满人妻被黑人猛烈进入 | 日本xxxx色视频在线观看免费 | 黑人粗大猛烈进出高潮视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲一区二区三区国产精华液 | 国产精品手机免费 | 亚洲 另类 在线 欧美 制服 | 青青草原综合久久大伊人精品 | 国产成人精品无码播放 | 久久综合狠狠综合久久综合88 | 丰满诱人的人妻3 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 波多野42部无码喷潮在线 | 亚洲欧洲中文日韩av乱码 | 少妇性俱乐部纵欲狂欢电影 | 欧美日韩人成综合在线播放 | 日韩精品久久久肉伦网站 | 中文精品无码中文字幕无码专区 | 最新国产麻豆aⅴ精品无码 | 人妻少妇精品无码专区二区 | 日韩成人一区二区三区在线观看 | 亚洲人成影院在线无码按摩店 | 蜜臀aⅴ国产精品久久久国产老师 | 秋霞成人午夜鲁丝一区二区三区 | 欧美人与牲动交xxxx | 国产精品久免费的黄网站 | 免费男性肉肉影院 | 久久久久久av无码免费看大片 | а√天堂www在线天堂小说 | 国产片av国语在线观看 | 日本精品久久久久中文字幕 | 樱花草在线播放免费中文 | 国产亚洲精品久久久久久久久动漫 | 亚洲人成影院在线观看 | 欧美一区二区三区 | 在线精品亚洲一区二区 | 丰满人妻一区二区三区免费视频 | 三上悠亚人妻中文字幕在线 | av无码不卡在线观看免费 | 亚洲狠狠婷婷综合久久 | 亚洲综合精品香蕉久久网 | 图片小说视频一区二区 | 3d动漫精品啪啪一区二区中 | 波多野42部无码喷潮在线 | 国产在线精品一区二区三区直播 | 亚洲国精产品一二二线 | 国内综合精品午夜久久资源 | 国产精品久久久久久久影院 | 亚洲日韩一区二区 | 黑人巨大精品欧美一区二区 | 久久久久久久久蜜桃 | 亚洲中文字幕av在天堂 | 激情内射日本一区二区三区 | 国色天香社区在线视频 | 亚洲午夜无码久久 | 中国女人内谢69xxxx | 成人无码精品1区2区3区免费看 | 久久精品国产精品国产精品污 | 九九久久精品国产免费看小说 | 亚洲自偷自拍另类第1页 | 亚洲日韩av片在线观看 | 中文字幕无线码免费人妻 | 亚洲色大成网站www国产 | 精品国偷自产在线视频 | 性欧美大战久久久久久久 | 一本久道久久综合婷婷五月 | 日韩精品久久久肉伦网站 | 国产精品美女久久久 | 亚洲日本va中文字幕 | 天天综合网天天综合色 | 精品成在人线av无码免费看 | 精品久久久中文字幕人妻 | 日韩人妻少妇一区二区三区 | 日本大乳高潮视频在线观看 | 久久99精品国产麻豆蜜芽 | 亚洲一区二区观看播放 | 好屌草这里只有精品 | 一本久久a久久精品亚洲 | 亚洲日韩精品欧美一区二区 | 2020最新国产自产精品 | 日本护士xxxxhd少妇 | 2020久久超碰国产精品最新 | 97色伦图片97综合影院 | 国产亚洲人成a在线v网站 | 国产午夜手机精彩视频 | 午夜成人1000部免费视频 | 日韩视频 中文字幕 视频一区 | 人人妻在人人 | 人妻夜夜爽天天爽三区 | 一本一道久久综合久久 | 乱码av麻豆丝袜熟女系列 | 久久国产精品精品国产色婷婷 | 日韩欧美群交p片內射中文 | 国产sm调教视频在线观看 | 日本一区二区更新不卡 | 天天拍夜夜添久久精品大 | 亚洲精品一区二区三区四区五区 | 亚洲日本一区二区三区在线 | 东京无码熟妇人妻av在线网址 | 曰本女人与公拘交酡免费视频 | 野外少妇愉情中文字幕 | 女人色极品影院 | 真人与拘做受免费视频一 | 98国产精品综合一区二区三区 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲熟悉妇女xxx妇女av | 老头边吃奶边弄进去呻吟 | 亚洲国产av美女网站 | 久久精品99久久香蕉国产色戒 | 国产肉丝袜在线观看 | 久久精品一区二区三区四区 | 在线视频网站www色 | 搡女人真爽免费视频大全 | 久久国产精品偷任你爽任你 | 国产精品a成v人在线播放 | 国产乱子伦视频在线播放 | 亚洲va中文字幕无码久久不卡 | 中文字幕无码av波多野吉衣 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产亚洲欧美在线专区 | 久久综合九色综合97网 | 国产成人精品久久亚洲高清不卡 | 国产九九九九九九九a片 | 大地资源中文第3页 | 国产精品国产自线拍免费软件 | 精品国偷自产在线 | 欧洲极品少妇 | 欧美老人巨大xxxx做受 | 人人爽人人澡人人高潮 | 国产女主播喷水视频在线观看 | 成人精品视频一区二区三区尤物 | 呦交小u女精品视频 | 午夜时刻免费入口 | 国产片av国语在线观看 | 欧美丰满少妇xxxx性 | 性生交大片免费看女人按摩摩 | 亚洲天堂2017无码 | 成人无码精品一区二区三区 | 亚洲狠狠色丁香婷婷综合 | 亚洲午夜无码久久 | 色婷婷欧美在线播放内射 | 精品午夜福利在线观看 | 国产乱人无码伦av在线a | 131美女爱做视频 | 免费观看黄网站 | 在线а√天堂中文官网 | 老头边吃奶边弄进去呻吟 | 无码免费一区二区三区 | 毛片内射-百度 | 国产在线精品一区二区三区直播 | 精品国产一区二区三区四区在线看 | av无码不卡在线观看免费 | 亚洲爆乳大丰满无码专区 | 亚洲自偷自拍另类第1页 | 国产精品高潮呻吟av久久4虎 | 精品一区二区三区波多野结衣 | 国内精品一区二区三区不卡 | 久久99国产综合精品 | 少妇久久久久久人妻无码 | 人妻无码αv中文字幕久久琪琪布 | 2020久久超碰国产精品最新 | 久久国产精品萌白酱免费 | 国产97人人超碰caoprom | 亚洲国产高清在线观看视频 | 精品乱子伦一区二区三区 | 久久99精品久久久久久 | 欧美日韩一区二区免费视频 | 无码人妻久久一区二区三区不卡 | 国产亚洲欧美日韩亚洲中文色 | 一本加勒比波多野结衣 | 77777熟女视频在线观看 а天堂中文在线官网 | 天天拍夜夜添久久精品 | 国产69精品久久久久app下载 | 狠狠噜狠狠狠狠丁香五月 | 午夜精品一区二区三区在线观看 | 欧美老人巨大xxxx做受 | 亚洲国产日韩a在线播放 | 久久午夜夜伦鲁鲁片无码免费 | 青青草原综合久久大伊人精品 | 少妇人妻av毛片在线看 | 中文精品久久久久人妻不卡 | 国产成人精品视频ⅴa片软件竹菊 | 国产农村乱对白刺激视频 | 中文字幕色婷婷在线视频 | 国产av久久久久精东av | 无人区乱码一区二区三区 | 伊人久久大香线焦av综合影院 | а√天堂www在线天堂小说 | 久久精品人妻少妇一区二区三区 | 国产精品久久精品三级 | 熟妇人妻无码xxx视频 | 2020久久香蕉国产线看观看 | 最近免费中文字幕中文高清百度 | 亚洲狠狠婷婷综合久久 | 无码人妻少妇伦在线电影 | 人妻少妇精品无码专区动漫 | 成人一区二区免费视频 | 永久免费观看国产裸体美女 | 日韩在线不卡免费视频一区 | 噜噜噜亚洲色成人网站 | 亚洲精品www久久久 | 精品亚洲韩国一区二区三区 | 76少妇精品导航 | 人人澡人人妻人人爽人人蜜桃 | 成人无码视频在线观看网站 | 无套内射视频囯产 | 在线观看免费人成视频 | 在线天堂新版最新版在线8 | 亚洲午夜福利在线观看 | 国产精品亚洲lv粉色 | 九九热爱视频精品 | 暴力强奷在线播放无码 | 国产亚洲精品久久久久久大师 | 网友自拍区视频精品 | 欧美老人巨大xxxx做受 | 丁香花在线影院观看在线播放 | 久久久久av无码免费网 | 色 综合 欧美 亚洲 国产 | 亚洲精品无码国产 | 婷婷色婷婷开心五月四房播播 | 人人妻人人澡人人爽精品欧美 | 欧美精品在线观看 | 欧美黑人性暴力猛交喷水 | 正在播放东北夫妻内射 | 国产国语老龄妇女a片 | 呦交小u女精品视频 | 毛片内射-百度 | 亚洲中文字幕av在天堂 | 日日摸天天摸爽爽狠狠97 | 免费中文字幕日韩欧美 | 熟女体下毛毛黑森林 | 色欲人妻aaaaaaa无码 | 99国产欧美久久久精品 | 精品国产国产综合精品 | 免费观看又污又黄的网站 | 精品人妻人人做人人爽夜夜爽 | 中文字幕日韩精品一区二区三区 | 88国产精品欧美一区二区三区 | 一本久久a久久精品vr综合 | 色婷婷久久一区二区三区麻豆 | 色五月五月丁香亚洲综合网 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产内射爽爽大片视频社区在线 | 精品夜夜澡人妻无码av蜜桃 | 国产精品人妻一区二区三区四 | 亚洲欧美国产精品专区久久 | 2019nv天堂香蕉在线观看 | 亚洲理论电影在线观看 | 日韩欧美中文字幕在线三区 | 亚洲人成影院在线无码按摩店 | 人人妻人人澡人人爽欧美一区 | 欧美熟妇另类久久久久久不卡 | 又粗又大又硬又长又爽 | 蜜桃av抽搐高潮一区二区 | 亚洲国产欧美日韩精品一区二区三区 | 久久国产精品二国产精品 | 国产精品久久久午夜夜伦鲁鲁 | 中文字幕人妻无码一夲道 | 色一情一乱一伦一区二区三欧美 | 狠狠色丁香久久婷婷综合五月 | 国产亚洲精品久久久久久 | 国产精品久久久午夜夜伦鲁鲁 | av香港经典三级级 在线 | 奇米影视7777久久精品人人爽 | 一本一道久久综合久久 | 国产女主播喷水视频在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 成人性做爰aaa片免费看不忠 | 丝袜 中出 制服 人妻 美腿 | 国产亚洲tv在线观看 | 亚洲另类伦春色综合小说 | 国产极品美女高潮无套在线观看 | 亚洲中文字幕无码中文字在线 | 国产精品爱久久久久久久 | 日韩精品一区二区av在线 | 久久久精品成人免费观看 | 亚洲综合无码一区二区三区 | 精品久久8x国产免费观看 | 国产精品手机免费 | 人人澡人人妻人人爽人人蜜桃 | 丝袜美腿亚洲一区二区 | 国产区女主播在线观看 | 超碰97人人做人人爱少妇 | 国产精品亚洲专区无码不卡 | 国产精品无套呻吟在线 | 精品亚洲成av人在线观看 | 中文字幕无码热在线视频 | 欧美野外疯狂做受xxxx高潮 | 少妇高潮喷潮久久久影院 | 麻花豆传媒剧国产免费mv在线 | 亚洲国产午夜精品理论片 | 无遮挡国产高潮视频免费观看 | 国产成人无码av一区二区 | 国精产品一品二品国精品69xx | 少妇无套内谢久久久久 | 亚洲人成网站免费播放 | 精品无码国产一区二区三区av | 色婷婷综合激情综在线播放 | 扒开双腿吃奶呻吟做受视频 | 国产精品理论片在线观看 | 美女扒开屁股让男人桶 | 国产精品免费大片 | 色狠狠av一区二区三区 | 人妻夜夜爽天天爽三区 | 国产精品无码一区二区桃花视频 | 大地资源中文第3页 | 国产乱码精品一品二品 | 男女超爽视频免费播放 | 特黄特色大片免费播放器图片 | 国产内射老熟女aaaa | 小泽玛莉亚一区二区视频在线 | 日本饥渴人妻欲求不满 | 76少妇精品导航 | 国色天香社区在线视频 | 妺妺窝人体色www婷婷 | 激情内射亚州一区二区三区爱妻 | 亚洲男人av天堂午夜在 | 中文字幕无码免费久久9一区9 | 67194成是人免费无码 | 高潮喷水的毛片 | 欧美日韩一区二区综合 | 久久五月精品中文字幕 | 国产办公室秘书无码精品99 | 超碰97人人做人人爱少妇 | 久久国产自偷自偷免费一区调 | 无码人妻精品一区二区三区下载 | 亚洲国产欧美日韩精品一区二区三区 | 欧美精品无码一区二区三区 | 国产小呦泬泬99精品 | 成人精品视频一区二区三区尤物 | 少妇人妻av毛片在线看 | 欧洲熟妇色 欧美 | 国产麻豆精品精东影业av网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品自产拍在线观看 | 午夜熟女插插xx免费视频 | 成人欧美一区二区三区黑人 | 精品国精品国产自在久国产87 | 老子影院午夜伦不卡 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲精品中文字幕久久久久 | 国产又粗又硬又大爽黄老大爷视 | 欧美人与禽猛交狂配 | 国产欧美亚洲精品a | 一本色道久久综合狠狠躁 | 久久精品女人天堂av免费观看 | 亚洲欧美国产精品久久 | 国产内射老熟女aaaa | 亚洲熟熟妇xxxx | 日本精品人妻无码77777 天堂一区人妻无码 | 国产在线无码精品电影网 | 国产成人久久精品流白浆 | 亚洲一区二区三区无码久久 | 日本饥渴人妻欲求不满 | 国产在线一区二区三区四区五区 | 亚洲日韩精品欧美一区二区 | 日本一区二区三区免费高清 | 国产极品视觉盛宴 | 国产超碰人人爽人人做人人添 | 成人三级无码视频在线观看 | 免费无码av一区二区 | 亚洲一区二区三区国产精华液 | 欧美精品国产综合久久 | 装睡被陌生人摸出水好爽 | 国产明星裸体无码xxxx视频 | 性色av无码免费一区二区三区 | 久久综合给久久狠狠97色 | 欧美人与禽zoz0性伦交 | 亚洲の无码国产の无码步美 | 国产超级va在线观看视频 | 久久精品国产亚洲精品 | 无遮无挡爽爽免费视频 | 精品欧洲av无码一区二区三区 | 97夜夜澡人人爽人人喊中国片 | 欧美熟妇另类久久久久久多毛 | 沈阳熟女露脸对白视频 | ass日本丰满熟妇pics | 伊人久久大香线焦av综合影院 | 成人性做爰aaa片免费看不忠 | 日本高清一区免费中文视频 | 麻豆精产国品 | 国产高清av在线播放 | 在线欧美精品一区二区三区 | 在线精品亚洲一区二区 | 欧美人妻一区二区三区 | 玩弄中年熟妇正在播放 | 76少妇精品导航 | 日日碰狠狠丁香久燥 | 鲁一鲁av2019在线 | a在线亚洲男人的天堂 | 亚洲高清偷拍一区二区三区 | 中文久久乱码一区二区 | 日日天干夜夜狠狠爱 | 一本大道伊人av久久综合 | 亚洲熟妇色xxxxx欧美老妇 | 免费看少妇作爱视频 | 最新版天堂资源中文官网 | 成人影院yy111111在线观看 | 人妻无码αv中文字幕久久琪琪布 | 午夜福利不卡在线视频 | 内射巨臀欧美在线视频 | 女人和拘做爰正片视频 | 精品久久8x国产免费观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲日韩乱码中文无码蜜桃臀网站 | 精品乱码久久久久久久 | 久久99精品久久久久久动态图 | 蜜桃臀无码内射一区二区三区 | 六十路熟妇乱子伦 | 丝袜人妻一区二区三区 | 亚洲精品午夜国产va久久成人 | 亚洲性无码av中文字幕 | 一本色道久久综合亚洲精品不卡 | 精品国产一区二区三区四区在线看 | 亚洲va欧美va天堂v国产综合 | 国产精品a成v人在线播放 | 狠狠噜狠狠狠狠丁香五月 | 亚洲中文字幕乱码av波多ji | 夜夜躁日日躁狠狠久久av | 在线天堂新版最新版在线8 | 在线天堂新版最新版在线8 | 性生交大片免费看女人按摩摩 | 久久久精品456亚洲影院 | 久久精品国产大片免费观看 | aⅴ亚洲 日韩 色 图网站 播放 | 亚拍精品一区二区三区探花 | 乱中年女人伦av三区 | 丝袜 中出 制服 人妻 美腿 | 中文字幕无码视频专区 | аⅴ资源天堂资源库在线 | 国产内射老熟女aaaa | 欧美老人巨大xxxx做受 | 又粗又大又硬又长又爽 | 亚洲gv猛男gv无码男同 | 无码播放一区二区三区 | 国产97人人超碰caoprom | 玩弄人妻少妇500系列视频 | 沈阳熟女露脸对白视频 | 国产无套粉嫩白浆在线 | 国产电影无码午夜在线播放 | 久久无码专区国产精品s | 亚洲成色在线综合网站 | 免费人成网站视频在线观看 | 亚洲欧洲日本综合aⅴ在线 | 欧美丰满熟妇xxxx性ppx人交 | 国产亚洲精品精品国产亚洲综合 | 99久久亚洲精品无码毛片 | av在线亚洲欧洲日产一区二区 | 一区二区传媒有限公司 | 久久视频在线观看精品 | 午夜精品久久久内射近拍高清 | 亚洲毛片av日韩av无码 | 波多野结衣av在线观看 | 国产精品第一区揄拍无码 | 青青久在线视频免费观看 | 狠狠亚洲超碰狼人久久 | 日产精品高潮呻吟av久久 | 国产精品18久久久久久麻辣 | 国产精品国产自线拍免费软件 | 成人精品一区二区三区中文字幕 | 国产特级毛片aaaaaaa高清 | 日韩成人一区二区三区在线观看 | 久久97精品久久久久久久不卡 | 国产又爽又猛又粗的视频a片 | 免费无码午夜福利片69 | 青青久在线视频免费观看 | 四虎影视成人永久免费观看视频 | 亚洲 日韩 欧美 成人 在线观看 | 欧美兽交xxxx×视频 | 曰本女人与公拘交酡免费视频 | 成人av无码一区二区三区 | 国产亚洲精品久久久久久国模美 | 国内老熟妇对白xxxxhd | 亚洲成av人片天堂网无码】 | 国产人妻精品一区二区三区 | 噜噜噜亚洲色成人网站 | 精品偷自拍另类在线观看 | 波多野结衣av一区二区全免费观看 | 欧美猛少妇色xxxxx | 亚洲国产欧美国产综合一区 | 精品午夜福利在线观看 | 初尝人妻少妇中文字幕 | 久久精品国产精品国产精品污 | 99久久久无码国产精品免费 | 免费无码的av片在线观看 | 玩弄人妻少妇500系列视频 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久久久久久女国产乱让韩 | 国产精品美女久久久久av爽李琼 | 免费人成在线视频无码 | 亚洲精品国偷拍自产在线麻豆 | 无套内射视频囯产 | 国产精品免费大片 | 欧美黑人巨大xxxxx | 国产香蕉尹人综合在线观看 | 无码精品人妻一区二区三区av | 毛片内射-百度 | 婷婷色婷婷开心五月四房播播 | 熟妇人妻无码xxx视频 | 欧洲美熟女乱又伦 | 无套内谢老熟女 | 大屁股大乳丰满人妻 | 精品厕所偷拍各类美女tp嘘嘘 | 97久久精品无码一区二区 | 国产成人无码av在线影院 | 国产九九九九九九九a片 | 精品国产国产综合精品 | 精品欧洲av无码一区二区三区 | 5858s亚洲色大成网站www | 亚洲成av人影院在线观看 | 人妻熟女一区 | 免费人成在线视频无码 | 成 人 网 站国产免费观看 | 日日干夜夜干 | 九九久久精品国产免费看小说 | 丰满人妻精品国产99aⅴ | 中文字幕乱码人妻无码久久 | 免费中文字幕日韩欧美 | 国产精品无套呻吟在线 | 无码乱肉视频免费大全合集 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品亚洲五月天高清 | 国内少妇偷人精品视频 | 伊人色综合久久天天小片 | 精品日本一区二区三区在线观看 | 无码精品人妻一区二区三区av | 成人欧美一区二区三区 | 久久婷婷五月综合色国产香蕉 | 亚洲人成影院在线无码按摩店 | 中文字幕+乱码+中文字幕一区 | 国产三级久久久精品麻豆三级 | 国产精品亚洲а∨无码播放麻豆 | 99在线 | 亚洲 | 亚洲精品一区二区三区四区五区 | 亚洲成在人网站无码天堂 | 欧美老熟妇乱xxxxx | 国产美女精品一区二区三区 | 在线观看国产一区二区三区 | 久久精品国产亚洲精品 | 欧美人与禽zoz0性伦交 | 初尝人妻少妇中文字幕 | 亚洲国产精品一区二区美利坚 | 啦啦啦www在线观看免费视频 | av在线亚洲欧洲日产一区二区 | 国产舌乚八伦偷品w中 | 精品日本一区二区三区在线观看 | 人妻有码中文字幕在线 | 伊人久久大香线焦av综合影院 | 强伦人妻一区二区三区视频18 | 亚洲成a人片在线观看日本 | 又粗又大又硬毛片免费看 | 乌克兰少妇xxxx做受 | 中文字幕av伊人av无码av | 99久久精品日本一区二区免费 | 日本va欧美va欧美va精品 | 国产精品成人av在线观看 | 国产av人人夜夜澡人人爽麻豆 | 中文字幕色婷婷在线视频 | 乌克兰少妇xxxx做受 | 波多野结衣高清一区二区三区 | 中文字幕人成乱码熟女app | 西西人体www44rt大胆高清 | 无码中文字幕色专区 | 97se亚洲精品一区 | 伊人色综合久久天天小片 | 任你躁在线精品免费 | 好爽又高潮了毛片免费下载 | 一本无码人妻在中文字幕免费 | 国产成人综合色在线观看网站 | 18禁止看的免费污网站 | 亚洲色在线无码国产精品不卡 | 亚洲男人av天堂午夜在 | 亚洲国产精品无码一区二区三区 | 99久久精品午夜一区二区 | 日韩精品无码免费一区二区三区 | 少妇愉情理伦片bd | 国产69精品久久久久app下载 | 亚洲小说春色综合另类 | 成人免费无码大片a毛片 | 亚洲中文字幕成人无码 | 亚洲中文字幕乱码av波多ji | 99久久精品国产一区二区蜜芽 | 色综合久久久无码网中文 | 色诱久久久久综合网ywww | 98国产精品综合一区二区三区 | 成年女人永久免费看片 | 3d动漫精品啪啪一区二区中 | 一本大道伊人av久久综合 | 97夜夜澡人人双人人人喊 | 国产熟妇高潮叫床视频播放 | 女高中生第一次破苞av | 国产麻豆精品精东影业av网站 | 综合网日日天干夜夜久久 | 成人无码精品1区2区3区免费看 | 大地资源中文第3页 | 无码精品国产va在线观看dvd | 粉嫩少妇内射浓精videos | 欧美激情综合亚洲一二区 | 中文字幕无码热在线视频 | 男女猛烈xx00免费视频试看 | 亚洲国产欧美国产综合一区 | 伊人色综合久久天天小片 | 欧美变态另类xxxx | 亚洲精品国产精品乱码不卡 | 少妇厨房愉情理9仑片视频 | 小鲜肉自慰网站xnxx | 一本无码人妻在中文字幕免费 | 国产精品亚洲五月天高清 | 欧美日韩人成综合在线播放 | 人人爽人人澡人人高潮 | 永久黄网站色视频免费直播 | 好男人www社区 | 国产综合久久久久鬼色 | 精品偷拍一区二区三区在线看 | 久久久久久久人妻无码中文字幕爆 | 精品成人av一区二区三区 | 日本乱人伦片中文三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久综合网欧美色妞网 | 国产一精品一av一免费 | 亚洲色无码一区二区三区 | 激情国产av做激情国产爱 | 人妻夜夜爽天天爽三区 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲日本在线电影 | 久久久久久九九精品久 | 全黄性性激高免费视频 | 国产亲子乱弄免费视频 | 婷婷六月久久综合丁香 | 国产人妻久久精品二区三区老狼 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 成年女人永久免费看片 | 欧美大屁股xxxxhd黑色 | 久久精品国产一区二区三区肥胖 | 亚洲日本在线电影 | 欧美精品一区二区精品久久 | 亚洲区欧美区综合区自拍区 | 日本精品人妻无码免费大全 | 国产福利视频一区二区 | 免费看男女做好爽好硬视频 | 亚洲精品国偷拍自产在线麻豆 | 国产激情无码一区二区 | 国产精品久久国产精品99 | 久青草影院在线观看国产 | 国产一区二区三区精品视频 | 大乳丰满人妻中文字幕日本 | 玩弄中年熟妇正在播放 | 又大又硬又黄的免费视频 | 国产精品亚洲五月天高清 | 亚洲一区二区三区无码久久 | 国语自产偷拍精品视频偷 | 日韩精品无码免费一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 中国大陆精品视频xxxx | 日日夜夜撸啊撸 | 日本xxxx色视频在线观看免费 | 中文字幕人妻丝袜二区 | 日本欧美一区二区三区乱码 | 色一情一乱一伦一视频免费看 | 在线成人www免费观看视频 | 欧美人与禽zoz0性伦交 | 玩弄人妻少妇500系列视频 | 午夜福利试看120秒体验区 | 成人精品视频一区二区三区尤物 | 亚洲精品www久久久 | 欧美日韩视频无码一区二区三 | 国产亚洲精品精品国产亚洲综合 | 国产又爽又猛又粗的视频a片 | 久久久国产一区二区三区 | 国产成人精品必看 | 永久免费观看美女裸体的网站 | 熟女俱乐部五十路六十路av | 老太婆性杂交欧美肥老太 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 一个人看的视频www在线 | 一本久道高清无码视频 | 成人免费无码大片a毛片 | 久久久久99精品成人片 | 国产xxx69麻豆国语对白 | 亚洲春色在线视频 | 久久久久久久人妻无码中文字幕爆 | 人妻无码αv中文字幕久久琪琪布 | 在线а√天堂中文官网 | 精品无码一区二区三区的天堂 | 人妻少妇精品无码专区二区 | a片在线免费观看 | 国产内射老熟女aaaa | 日韩人妻无码中文字幕视频 | 国产香蕉97碰碰久久人人 | 麻豆人妻少妇精品无码专区 | aⅴ在线视频男人的天堂 | 精品国产成人一区二区三区 | 日韩人妻无码一区二区三区久久99 | 99久久婷婷国产综合精品青草免费 | av无码电影一区二区三区 | 亚欧洲精品在线视频免费观看 | 亚洲午夜久久久影院 | 青青草原综合久久大伊人精品 | 无码人妻精品一区二区三区不卡 | 国产婷婷色一区二区三区在线 | 俺去俺来也www色官网 | 亚洲精品鲁一鲁一区二区三区 | 丰满岳乱妇在线观看中字无码 | 2020久久超碰国产精品最新 | av人摸人人人澡人人超碰下载 | 精品国偷自产在线视频 | 中文字幕乱妇无码av在线 | 久久久精品国产sm最大网站 | 午夜福利电影 | 人妻插b视频一区二区三区 | 女人被男人爽到呻吟的视频 | 牲欲强的熟妇农村老妇女视频 | a片在线免费观看 | 丰满妇女强制高潮18xxxx | 国产av无码专区亚洲a∨毛片 | 国产小呦泬泬99精品 | 亚洲日韩av一区二区三区四区 | 国产明星裸体无码xxxx视频 | 乱中年女人伦av三区 | 99精品视频在线观看免费 | 高潮毛片无遮挡高清免费视频 | av小次郎收藏 | 日本乱人伦片中文三区 | 综合激情五月综合激情五月激情1 | 国产精品鲁鲁鲁 | 国产精品美女久久久网av | 亚洲精品久久久久中文第一幕 | 久久五月精品中文字幕 | 国产女主播喷水视频在线观看 | 无遮挡国产高潮视频免费观看 | 成人精品视频一区二区三区尤物 | 高清国产亚洲精品自在久久 | 久久久久国色av免费观看性色 | 人人澡人摸人人添 | 久久人妻内射无码一区三区 | 无码av免费一区二区三区试看 | 国产午夜无码精品免费看 | 四虎永久在线精品免费网址 | 无码人中文字幕 | 国产真人无遮挡作爱免费视频 | 久久综合狠狠综合久久综合88 | 亚洲乱码国产乱码精品精 | 欧美野外疯狂做受xxxx高潮 | 国产又粗又硬又大爽黄老大爷视 | 久久精品国产大片免费观看 | 一本久道久久综合狠狠爱 | 婷婷六月久久综合丁香 | 国产精品人妻一区二区三区四 | 亚洲国产精品一区二区美利坚 | 国产亚洲欧美日韩亚洲中文色 | 秋霞成人午夜鲁丝一区二区三区 | 成 人 免费观看网站 | 亚洲日韩av一区二区三区中文 | 国产精品高潮呻吟av久久 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品18久久久久久麻辣 | 久久久久久久久888 | 少妇性l交大片欧洲热妇乱xxx | 国产午夜福利亚洲第一 | 日韩人妻无码一区二区三区久久99 | 内射巨臀欧美在线视频 | 久久久久se色偷偷亚洲精品av | 色一情一乱一伦一视频免费看 | 色综合久久久久综合一本到桃花网 | 国产无av码在线观看 | 亚洲熟妇色xxxxx欧美老妇y | 玩弄少妇高潮ⅹxxxyw | 亚洲精品综合一区二区三区在线 | 日本www一道久久久免费榴莲 | 亚洲精品中文字幕 | 国产无套内射久久久国产 | 夫妻免费无码v看片 | 久久精品国产精品国产精品污 | 毛片内射-百度 | 国产超碰人人爽人人做人人添 | 亚洲自偷精品视频自拍 | 亚洲精品久久久久中文第一幕 | 欧美35页视频在线观看 | 精品 日韩 国产 欧美 视频 | 亚洲第一无码av无码专区 | 无遮挡国产高潮视频免费观看 | 国产激情艳情在线看视频 | 国产人妻久久精品二区三区老狼 | 国产精品-区区久久久狼 | 极品嫩模高潮叫床 | 国产人妻人伦精品1国产丝袜 | 激情五月综合色婷婷一区二区 | 少妇性俱乐部纵欲狂欢电影 | 巨爆乳无码视频在线观看 | 99在线 | 亚洲 | 小泽玛莉亚一区二区视频在线 | 荫蒂被男人添的好舒服爽免费视频 | 青草青草久热国产精品 | 国内精品人妻无码久久久影院蜜桃 | 成人试看120秒体验区 | 最新国产乱人伦偷精品免费网站 | 亚洲狠狠色丁香婷婷综合 | 丰满人妻被黑人猛烈进入 | 欧美日韩视频无码一区二区三 | 中文字幕色婷婷在线视频 | 欧洲精品码一区二区三区免费看 | 亚洲精品一区二区三区婷婷月 | 好男人www社区 | 色情久久久av熟女人妻网站 | 亚洲成a人片在线观看日本 | 亚洲国产av美女网站 | 婷婷综合久久中文字幕蜜桃三电影 | 一本一道久久综合久久 | 激情内射亚州一区二区三区爱妻 | 国产一精品一av一免费 | 玩弄中年熟妇正在播放 | 又粗又大又硬又长又爽 | 久久亚洲精品成人无码 | 国产网红无码精品视频 | 欧美野外疯狂做受xxxx高潮 | 亚洲综合精品香蕉久久网 | 亚洲综合精品香蕉久久网 | 图片区 小说区 区 亚洲五月 | 国产精品自产拍在线观看 | 亚洲色www成人永久网址 | 日本一区二区更新不卡 | 久久精品国产亚洲精品 | 国产在热线精品视频 | 久久久精品国产sm最大网站 | 色一情一乱一伦一视频免费看 | 97无码免费人妻超级碰碰夜夜 | 精品人人妻人人澡人人爽人人 | 亚洲午夜久久久影院 | 天堂а√在线地址中文在线 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产香蕉尹人综合在线观看 | 丝袜足控一区二区三区 | 国产精品久久国产三级国 | 亚洲无人区午夜福利码高清完整版 | 噜噜噜亚洲色成人网站 | av人摸人人人澡人人超碰下载 | 久久久久久a亚洲欧洲av冫 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久国产精品精品国产色婷婷 | 无码人妻av免费一区二区三区 | 日本丰满护士爆乳xxxx | 黑人大群体交免费视频 | 少妇一晚三次一区二区三区 | 国内精品人妻无码久久久影院 | 国产精品多人p群无码 | 中文字幕无码av激情不卡 | 日韩无套无码精品 | 玩弄少妇高潮ⅹxxxyw | 国产sm调教视频在线观看 | 全黄性性激高免费视频 | 丝袜美腿亚洲一区二区 | 国产午夜亚洲精品不卡下载 | 午夜福利一区二区三区在线观看 | 一个人免费观看的www视频 | 成人免费视频一区二区 | av无码不卡在线观看免费 | 久久精品人妻少妇一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 18无码粉嫩小泬无套在线观看 | 中文字幕无码日韩专区 | 国产精品怡红院永久免费 | 呦交小u女精品视频 | 一个人看的视频www在线 | 国产精品成人av在线观看 | 99麻豆久久久国产精品免费 | 国产亚洲美女精品久久久2020 | 久久人人爽人人爽人人片ⅴ | 国产午夜亚洲精品不卡下载 | 日韩少妇白浆无码系列 | 日韩欧美中文字幕公布 | 人人爽人人爽人人片av亚洲 | 午夜精品久久久久久久久 | 国内综合精品午夜久久资源 | 亚洲理论电影在线观看 | 国产乱码精品一品二品 | 精品亚洲韩国一区二区三区 | 一本色道久久综合狠狠躁 | 免费观看激色视频网站 | 在线精品国产一区二区三区 | 久久精品成人欧美大片 | 亚洲 高清 成人 动漫 | 国产在线精品一区二区高清不卡 | 狠狠噜狠狠狠狠丁香五月 | 无码av免费一区二区三区试看 | 久久综合九色综合欧美狠狠 | 欧美午夜特黄aaaaaa片 | 久久久中文字幕日本无吗 | 夫妻免费无码v看片 | 极品尤物被啪到呻吟喷水 | 欧美日韩在线亚洲综合国产人 | 无码人妻久久一区二区三区不卡 | 少妇的肉体aa片免费 | 亚洲精品午夜国产va久久成人 | 久久综合九色综合欧美狠狠 | 天天做天天爱天天爽综合网 | 色综合久久久久综合一本到桃花网 | √天堂资源地址中文在线 | 国产午夜视频在线观看 | 在线成人www免费观看视频 | 女人被爽到呻吟gif动态图视看 | 精品偷拍一区二区三区在线看 | 国产色精品久久人妻 | 麻豆精品国产精华精华液好用吗 | 国色天香社区在线视频 | 在线视频网站www色 | 最近免费中文字幕中文高清百度 | 成人一在线视频日韩国产 | 国产电影无码午夜在线播放 | 老司机亚洲精品影院 | 清纯唯美经典一区二区 | 精品成在人线av无码免费看 | 中文字幕无码免费久久99 | 伊人久久大香线焦av综合影院 | 无码帝国www无码专区色综合 | 婷婷五月综合缴情在线视频 | 久久综合香蕉国产蜜臀av | 人人爽人人澡人人高潮 | 久久精品女人的天堂av | 麻豆成人精品国产免费 | 无码人妻精品一区二区三区下载 | 天堂一区人妻无码 | 日本丰满护士爆乳xxxx | 亚洲日本一区二区三区在线 | 初尝人妻少妇中文字幕 | 日韩人妻系列无码专区 | 国产真实伦对白全集 | 国产日产欧产精品精品app | 久久精品无码一区二区三区 | 国产精品va在线观看无码 | 亚洲国产欧美日韩精品一区二区三区 | 色欲综合久久中文字幕网 | 国产精品亚洲一区二区三区喷水 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美国产日韩亚洲中文 | 国产欧美熟妇另类久久久 | 又粗又大又硬又长又爽 | 小鲜肉自慰网站xnxx | 国产成人精品优优av | 强辱丰满人妻hd中文字幕 | 2019nv天堂香蕉在线观看 | 久久久精品成人免费观看 | 国产精品久久久 | 国产成人精品一区二区在线小狼 | 色综合久久中文娱乐网 | 国内少妇偷人精品视频 | 免费观看又污又黄的网站 | 亚洲日韩av一区二区三区中文 | 久久久中文久久久无码 | 国产明星裸体无码xxxx视频 | 成人欧美一区二区三区 | 日韩欧美中文字幕在线三区 | 乱人伦中文视频在线观看 | 国产内射爽爽大片视频社区在线 | 我要看www免费看插插视频 | 亚洲伊人久久精品影院 | 国产午夜亚洲精品不卡 | 久久综合网欧美色妞网 | 欧美乱妇无乱码大黄a片 | 激情爆乳一区二区三区 | 欧美激情一区二区三区成人 | 少妇太爽了在线观看 | 内射老妇bbwx0c0ck | 日本熟妇人妻xxxxx人hd | aa片在线观看视频在线播放 | 少妇被黑人到高潮喷出白浆 | 午夜男女很黄的视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国色天香社区在线视频 | 国产片av国语在线观看 | 自拍偷自拍亚洲精品10p | 国产精品久免费的黄网站 | 国内精品人妻无码久久久影院蜜桃 | 人人超人人超碰超国产 | 丰满人妻被黑人猛烈进入 | 国产亚洲精品久久久久久大师 | 亚洲国产精品无码久久久久高潮 | 亚洲大尺度无码无码专区 | 久热国产vs视频在线观看 | 亚洲精品中文字幕 | 天下第一社区视频www日本 | 少妇性荡欲午夜性开放视频剧场 | 欧美激情一区二区三区成人 | 中文字幕无码热在线视频 | 国产精品无码成人午夜电影 | 国产精品二区一区二区aⅴ污介绍 | 美女极度色诱视频国产 | 国产精品久久久午夜夜伦鲁鲁 | 97资源共享在线视频 | 水蜜桃色314在线观看 | 三级4级全黄60分钟 | 伊在人天堂亚洲香蕉精品区 | 亚洲区小说区激情区图片区 | 丰满人妻一区二区三区免费视频 | 六月丁香婷婷色狠狠久久 | 乱人伦人妻中文字幕无码久久网 | 成人影院yy111111在线观看 | 久久综合给合久久狠狠狠97色 | 熟妇女人妻丰满少妇中文字幕 | 女人被男人爽到呻吟的视频 | 久久久精品成人免费观看 | 国产午夜福利100集发布 | 亚洲爆乳大丰满无码专区 | 精品偷拍一区二区三区在线看 | 国产成人精品三级麻豆 | 妺妺窝人体色www婷婷 | 久久国产精品_国产精品 | 日本大乳高潮视频在线观看 | 伊人久久大香线蕉av一区二区 | 图片小说视频一区二区 | 国内精品人妻无码久久久影院蜜桃 | 日日干夜夜干 | 欧美乱妇无乱码大黄a片 | 红桃av一区二区三区在线无码av | 欧美国产日韩亚洲中文 | 少妇被黑人到高潮喷出白浆 | 亚洲 欧美 激情 小说 另类 | 人妻天天爽夜夜爽一区二区 | 欧美第一黄网免费网站 | 成人性做爰aaa片免费看 | 亚洲爆乳精品无码一区二区三区 | 免费视频欧美无人区码 | 亚洲中文字幕乱码av波多ji | 久久成人a毛片免费观看网站 | 久久人人97超碰a片精品 | 青青久在线视频免费观看 | 麻豆av传媒蜜桃天美传媒 | 国产精品高潮呻吟av久久4虎 | 欧美黑人巨大xxxxx | 欧洲美熟女乱又伦 | 奇米影视7777久久精品 | 亚洲成在人网站无码天堂 | 日产精品高潮呻吟av久久 | 日韩人妻系列无码专区 | 国产精品亚洲五月天高清 | 九九热爱视频精品 | 国产精品无码成人午夜电影 | 亚洲 a v无 码免 费 成 人 a v | 日本免费一区二区三区最新 | 中文久久乱码一区二区 | 一个人免费观看的www视频 | 国产成人无码av片在线观看不卡 | 久久99国产综合精品 | 在线视频网站www色 |