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

0基礎帶你精通Java對象序列化--以Hessian為例

開發 前端
以Java為例,業務邏輯的輸入輸出都是【object】。但在RPC場景中,這些對象必須經由網絡傳輸。這里出現了一個根本性矛盾:網絡介質(網線/光纖)對面向對象編程(OOP)一無所知,它們只會用光和電忠實地傳輸扁平化的字節流(byte[])。

一、概述

二、基礎編碼原理

    1. 對象圖遍歷

    2. 編碼格式

三、Hessian編碼格式

    1. 數據塊

    2. 數據塊標簽(tag)

    3. POJO編碼

四、Hessian編碼細節

    1. 重復對象復用

    2. 小整數內聯(direct)

    3. 字符串編碼

    4. 整數壓縮

五、總結

一、概述

在高級編程語言的世界中,開發者始終與【object/struct】這類高度抽象的數據結構打交道。然而在分布式架構下,任何服務進程都不是數據孤島——跨進程數據交換是必然需求。

以Java為例,業務邏輯的輸入輸出都是【object】。但在RPC場景中,這些對象必須經由網絡傳輸。這里出現了一個根本性矛盾:網絡介質(網線/光纖)對面向對象編程(OOP)一無所知,它們只會用光和電忠實地傳輸扁平化的字節流(byte[])。

圖片圖片

軟件工程經典的分層理論驅使我們去添加一個轉換層。

圖片圖片

圖片圖片

我們需要有個工具或者組件來協助進行【object】和【byte[]】之間的雙向轉換。這個過程包含兩個對稱的流程:

  1. 【object】->【byte[]】:業界一般稱為序列化/serialize,但是那個單詞念起來很拗口,本文我們都叫它【編碼/encode】好了。
  2. 【byte[]】->【object】:業界一般稱為反序列化/deserialize,但是那個單詞念起來很拗口,本文我們都叫它【解碼/decode】好了。

Hessian作為Java生態中久經考驗的對象編解碼器,相較于同類產品具有以下兩大核心優勢:

  1. 深度Java生態適配:與JSON、Protobuf等語言中立的通用協議不同,Hessian專為Java深度優化,對泛型、多態等Java特有語言特性提供原生支持。
  2. 高效二進制協議:相較JSON等文本協議,Hessian采用精心設計的二進制編碼方案,在編解碼效率和數據壓縮率方面表現更優。

需要強調的是,軟件工程沒有銀彈——業務場景的差異決定了編解碼器的選擇必然需要權衡取舍。但就Java RPC而言,Hessian應該是經過廣泛實踐驗證的穩健選擇。

本文將系統解析Hessian的編碼流程,重點揭示其實現【object】->【byte[]】轉換的核心機制。

二、基礎編碼原理

對象編碼過程主要包含如下兩大核心:

  • 對象圖遍歷:遍歷高級數據結構

通過反射或元編程技術遍歷對象圖(Object Graph)。

是同類產品的通用邏輯,不管jackson、fastjson、hessian都需要用不同的方式做類似的事情。

  • 編碼格式:將高級數據結構按協議拍平放到byte[]

同類產品百家爭鳴,各有各的思路。

是同類產品的競技場,各個產品在這里體現差異化的競爭力。

設計權衡包括:

二進制效率 vs 可讀性(如Hessian二進制 vs JSON文本)

編碼緊湊性 vs 擴展靈活性

跨語言支持 vs 語言特性深度優化

對象圖遍歷決定了編碼能力的下限(能否正確處理對象結構),而編碼格式決定了編碼能力的上限(傳輸效率、兼容性等)。 

對象圖遍歷

圖片圖片

對象圖遍歷的本質是按深度優先進行對象屬性導航。

舉個例子:

圖片圖片

宏觀來看,A類型的對象其實是一棵樹(或圖),如果腦補不出來的話,我給你畫個圖:

圖片圖片

可以看到這棵樹的葉子結點都一定是Java內置的基本數據類型。換句話說,Java的8種基礎數據類型和他們的數組變體,支撐了Java豐富的預定義/自定義數據結構。

八股文:Java的8種基礎數據類型是哪些?String算不算基礎數據類型?

編碼的本質就是深度優先的遍歷這棵樹,拍平它,然后放到byte[]里。

我舉個例子吧。

偽代碼

為降低偽代碼復雜度,我們假設Java只有1種基礎數據類型int,也就是說Java里只有int和只包含int字段的自定義POJO。

我們定義POJO指的是用于傳輸、存儲使用的簡單Java Bean或者常說的DTO。

從某種意義上來說,Integer也是基于int封裝的自定義POJO。

字節流抽象

我們使用標準庫里的java.io.DataOutput來進行偽代碼說理,這個類提供了一些語義化的編碼function。

圖片圖片

java.io.DataOutput

對象圖遍歷

圖片圖片

字節流布局

最終呈現出來的字節流層面的數據布局會是這樣:

圖片圖片

看起來沒毛病,唯一的問題就是不好解碼。

當解碼端收到一個16字節的字節流以后,它分不清哪塊數據是A對象的,哪塊數據是B對象的。甚至都分不清這到底是4個int32還是2個int64。

這個問題需要編碼格式來解決。

編碼格式

上面遺留的問題,聰明的你肯定想到了答案。

就是因為編碼產物太太太簡陋了,整個過程中只是一股腦的把樹拍平,把葉子節點的值寫入字節流,缺少結構元數據。

最最最重要的結構元數據就是數據塊的邊界,上述4個數據塊,最起碼應該添加3個邊界標識。

圖片圖片

我們先用我們耳熟能詳的JSON格式來理解下編碼格式這個事情。

偽代碼

JSON是這樣解決這個問題的:

圖片圖片

JSON協議在嵌套的POJO上用{}來作為邊界,POJO內部的字段鍵值用 , 來做邊界,:拆分字段鍵值。

字節流布局

結果就變成這樣:

圖片圖片

這樣在解碼的時候,可以通過{、}、,、: 等token來切割JSON字符串,判定數據塊邊界并恢復出對象圖。

三、Hessian編碼格式

接下來我們可以開始介紹Hessian的編碼魔法了。

需要強調的是:Hessian跟JSON不同,Hessian是二進制格式。如果一個字節流直接按字符集解碼不能得到一個完整的、有意義的字符串,那它就是二進制編碼數據。

Hessian在編碼時,按數據塊類型為每一個數據塊添加一個前綴字節(byte)作為結構元數據,這些元數據和數據塊一起,交給解碼端使用。

數據塊

對象圖里的每一個節點,都是一個數據塊。

圖片圖片

如上圖所示,以A對象為根的對象圖,一共有6個數據塊。

數據塊標簽(tag)

Hessain在編碼每一個數據塊時,都會根據數據塊的類型在字節流中寫入一個前綴字節(0-255),這個字節說明了數據塊的語義和結構。

以int32為例,其最基礎的編碼格式如下:

圖片圖片

除該基礎編碼格式外,int32的編碼還有其他變體。

上述 I 就是整數類型的tag。解碼端讀取tag后,按tag值來解碼數據。

圖片圖片

com.alibaba.com.caucho.hessian.io.Hessian2Input#readObject(java.util.List<java.lang.Class<?>>)

由此延伸、拓展,其他的數據類型都是類似的模式。常見數據類型及其對應的tag值如下:

圖片圖片

值得注意的是,N、F、T三個tag是自解釋的,和固定值映射、綁定。

POJO編碼

POJO是一種特殊的數據塊,Hessian將POJO的結構和值拆開,分別編碼。

POJO結構編碼

POJO結構的tag為C,對照int32的編碼格式,POJO結構的編碼格式如下:

圖片圖片

舉個例子:

圖片圖片

編碼POJO時,Hessain會將POJO的類名、字段名列表寫入字節流,供解碼端使用。后續編碼POJO字段值時,需要按照字段名列表(如上述bb、cc)的順序來編碼字段值。

圖片圖片

POJO字段值編碼

POJO字段值的tag為O,對照int32的編碼格式,POJO字段值的編碼格式如下:

圖片圖片

舉個例子:

圖片圖片

可以看到,編碼POJO字段值的時候,在tag后面有一個POJO結構序號。

這是Hessian的一個數據復用的小技巧。

POJO結構復用

JSON協議有一個缺點,那就是重復數據帶來的存儲/傳輸開銷。舉個例子:

圖片圖片

如上圖,B類型的字段名(dd、ee)在編碼產物中重復出現!

Hessian希望解決這個問題,同一類型的多個POJO對象在序列化時,只需要在第一次的時候編碼類名、字段名等元數據,后續可以被重復的引用、使用,無需重復編碼。

如果用Hessian來編碼,結果會是這樣:

數據布局

圖片圖片

數據布局詳解

圖片圖片

如上圖,APojo、BPojo的字段名只會編碼一次。多個BPojo對象在編碼時會通過結構引用序號(1)來引用它。相對JSON,Hessian避免了多次編碼BPojo字段名的開銷。

為什么APojo的序號是1、BPojo的序號是2?

Hessain在編碼過程中,每次遇到一個新的、沒有處理過的新POJO類型時,會給它分配一個從0開始、單調遞增的序號。

遙相呼應的,解碼側每次解碼一個tag為C的POJO結構數據塊時,也會按解碼順序維護好其索引序號。

四、Hessian編碼細節

到現在,我們已經對Hessian編碼有了一個的概括性的認識,接下來我們來看看一些值得注意的細節。

重復對象復用

圖片圖片

A對象里有兩個字段(d、e)指向同一個對象B。如果不做處理,會因為重復編碼而帶來不必要的開銷。

圖片圖片

相同的一個B對象,因為被兩個字段重復引用,導致2次編碼、產生2份數據空間占用!

如果只是有額外的開銷,沒有可用性問題那都還好。關鍵是在循環引用場景下,會因為引用成環導致遞歸進行對象圖遍歷時觸發方法棧溢出!

圖片圖片

循環引用是重復引用的特例,只要將重復引用處理掉,循環引用也就沒問題了。

Hessian通過對象引用來解決這個問題。在對象圖遍歷過程中,遇到一個之前沒有遇到過、處理過的POJO對象時,會給它分配一個從0開始、單調遞增的序號。

后續再次需要序列化相同的對象時,直接跳過編碼流程,將這個對象的序號寫入字節流。

圖片

解碼時,解碼側按相同的順序來恢復出引用序號表,解碼后續的對象引用。

小整數內聯(direct)

很多編碼類型,都需要在tag后再維護一個整數類型的字段。比如:

  • POJO的編碼tag O需要一個整數來引用POJO結構引用序號。

圖片圖片

  • 類似String的變長類型需要一個整數來標識變長數據的長度。

圖片圖片

當字符串很短,就比如"hi"吧,短字符串編碼格式的長度字段可能比實際字符數據還大(用4字節存儲長度2),效率低下。

tag分段

Hessian將一些tag值的語義富化,讓它既體現數據類型,也體現小數值。

因為tag是一個byte(int8),取值范圍是0-255,每個tag標識一種特定的數據類型(int、boolean等),但是這些數據類型最多幾十種,取值范圍內還有很大的數值區間沒有被使用,其實比較浪費。那我們就可以把這些空閑的tag值,挪作他用,提升tag數值空間利用率。

我舉個例子,注意這個是參考Hessian思路的一個簡單示意,具體的Tag值和Hessian無關。

圖片圖片

長度內聯

對于長度≤31的字符串,Hessian用tag同時編碼類型和長度。

  1. 當0 <= tag <= 31 時,標識后續的數據塊為字符串。
  2. tag的數值即為后續數據塊的長度。

示例如下:

圖片圖片

序號內聯

當結構引用序號<=16時,Hessain用tag同時編碼類型和序號。

1. 當0x60 <= tag <= 0x70 時,標識后續的數據塊為POJO字段值。

2. tag - 0x60的值,即為POJO結構(類名+字段名)引用序號。

示例如下:

圖片圖片

相關源碼如下:

圖片圖片

com.alibaba.com.caucho.hessian.io.Hessian2Output#writeObjectBegin

字符串編碼

Hessian編碼字符串的關鍵流程是:字符串分段+不同長度的子串使用不同的tag。

  • 分段原則

字符串會被分割為若干塊,每塊最大長度為32768(0x8000)。前N-1塊均為完整長度的子串(32768字節),使用固定tag R標識;最后一塊為剩余部分,長度范圍為0-32768字節,根據實際長度選擇動態tag。

  • 尾段tag的選擇基于尾塊的長度決定

長度≤31(0x1F):使用單字節tag 0x00-0x1F直接內聯長度值。

32≤長度≤1023(0x3FF):使用tag 0后跟1字節長度(大端序),10bit的計數空間由tag字節和長度字節共同提供。這個地方有點繞,看下代碼吧。

長度≥1024:使用tag S后跟2字節長度(大端序)。

  • 相關源碼

圖片圖片

com.alibaba.com.caucho.hessian.io.Hessian2Output#writeString(java.lang.String)

這種設計通過減少長字符串的冗余長度標記,在保持兼容性的同時顯著提升了編碼效率。

整數壓縮

基礎編碼

整數(int32)的的取值范圍很大(-23^31 - 2^31),保守的編碼格式會用4個byte來編碼整數。

圖片圖片

但是日常使用中,我們會大量使用小整數,比如1、31。這時候如果還用4字節編碼就很不劃算啦~

變長編碼

Hessian根據整數的值范圍,動態的選擇不同的編碼方式,且不同的編碼方式有不同的tag:

  • 單字節整數編碼:類似【長度壓縮】,tag中直接內聯數值

適用范圍:-16 到 47(共64個值)

編碼方式:使用單字節,值為 value + 0x90(144)

例如:0 編碼為 0x90,-1 編碼為 0x8f,47 編碼為 0xbf

  • 雙字節整數編碼

適用范圍:-2048 到 2047

編碼方式:首字節為 0xc8 + (value >> 8),后跟一個字節存儲value剩下的bit。

這種編碼可以表示12bit有符號整數

  • 三字節整數編碼

適用范圍:-262144 到 262143

編碼方式:首字節為 0xd4 + (value >> 16),后跟兩個字節存儲 value 的高8位和低8位。

這種編碼可以表示19bit有符號整數。

  • 五字節整數編碼

適用范圍:超出上述范圍的所有32位整數

編碼方式:以 'I'(0x49)開頭,后跟4個字節表示完整的32位整數值。

  • 相關源碼:

圖片圖片

com.alibaba.com.caucho.hessian.io.Hessian2Output#writeInt

收益

  • 小整數(如 0、-1)僅需 1字節 ,而傳統 int32 固定4字節。
  • 大整數動態擴展,避免固定長度浪費(如 1000 僅需2字節)。

其他的數值類型比如int64也有類似的機制。

五、總結

Hessian專為Java優化,采用高效二進制協議,通過對象圖遍歷和編碼協議實現對象與字節流的轉換,利用數據塊標簽、重復對象復用、數據壓縮等機制,提升編解碼效率和數據壓縮率。

本文沒有去展開Hessian的代碼細節,而是盡可能深入淺出的介紹了Hessain的核心編碼原理,以幫助讀者建立對Hessian的宏觀認知,從而可以更好的去理解和使用它。

盡管不同語言/生態的序列化框架選型讓人眼花繚亂,但是各自需要解決的問題和解決問題的思路都大同小異;我們對Hessain原理的認識可以遷移到其他序列化框架,甚至自己寫一個領域特定的序列化框架。

相關內容均為筆者走讀源碼整理而來,如有疏漏,歡迎指正。

參考:

  • Hessian 2.0 Serialization Protocol(http://hessian.caucho.com/doc/hessian-serialization.html)
  • Hessian 2.0 序列化協議(中文版)(https://www.diguage.com/post/hessian-serialization-protocol/)
  • Hessian 協議解釋與實戰(一):布爾、日期、浮點數與整數(https://www.diguage.com/post/hessian-protocol-interpretation-and-practice-1/)
  • Hessian 協議解釋與實戰(二):長整型、二進制數據與 Null(https://www.diguage.com/post/hessian-protocol-interpretation-and-practice-2/)
  • Hessian 協議解釋與實戰(三):字符串(https://www.diguage.com/post/hessian-protocol-interpretation-and-practice-3/)
  • Hessian 協議解釋與實戰(四):數組與集合(https://www.diguage.com/post/hessian-protocol-interpretation-and-practice-4/)
  • Hessian 協議解釋與實戰(五):對象與映射(https://www.diguage.com/post/hessian-protocol-interpretation-and-practice-5/)
  • Hessian 源碼分析(Java)(https://www.diguage.com/post/hessian-source-analysis-for-java/)
責任編輯:武曉燕 來源: 得物技術
相關推薦

2022-08-06 08:41:18

序列化反序列化Hessian

2009-03-10 13:38:01

Java序列化字節流

2018-03-19 10:20:23

Java序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2011-06-01 15:05:02

序列化反序列化

2012-02-14 10:29:02

Java

2012-04-13 10:45:59

XML

2009-09-09 16:10:11

.NET序列化和反序列

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2010-05-14 10:55:04

java對象序列化

2013-03-11 13:55:03

JavaJSON

2009-12-01 16:22:17

PHP序列化格式

2021-08-30 12:25:12

Python序列化函數

2022-06-30 10:05:30

Java接口動態代理

2009-08-25 15:15:08

C#對象序列化應用

2009-08-24 17:14:08

C#序列化

2011-03-04 09:25:51

Java序列化

2009-08-06 11:16:25

C#序列化和反序列化

2023-12-13 13:49:52

Python序列化模塊
點贊
收藏

51CTO技術棧公眾號

亚洲女同精品视频| 国产精品久久久久久久蜜臀| 久久久久国产精品免费网站| 午夜不卡久久精品无码免费| 欧美成人性网| 最好看的中文字幕久久| 国产精品自拍首页| 亚洲性猛交富婆| 亚洲午夜精品一区二区国产 | 少妇一晚三次一区二区三区| 欧美一区二区公司| 免费在线一区观看| 欧美国产第一页| 97超碰在线资源| 免费观看亚洲天堂| 91福利在线观看| 黄色一级大片免费| 在线视频1区2区| 成人晚上爱看视频| 国产精品爽黄69| 日本一级片免费看| 亚洲欧美偷拍自拍| 亚洲欧洲自拍偷拍| 韩国黄色一级片| 国产精品蜜月aⅴ在线| 亚洲影视在线播放| 一级特黄录像免费播放全99| 少妇一区二区三区四区| 韩国精品在线观看| 国产精品九九久久久久久久| 成年人午夜视频| 欧美精品激情| 日韩在线免费视频观看| 日本高清www| 精品国产一区二区三区成人影院 | 五月婷婷六月丁香| 国产在线精品一区二区夜色 | 色综合影院在线| 蜜桃精品成人影片| 国产精品tv| 欧美白人最猛性xxxxx69交| 日韩精品你懂的| 欧美成人免费电影| 日韩欧美中文在线| 天天夜碰日日摸日日澡性色av| 国产原创精品视频| 国产精品三级av在线播放| 欧美日韩一区二区三区免费| 欧美一级淫片aaaaaa| 国产精品99久| 亚洲综合小说区| 国产精品国产三级国产aⅴ| 日韩国产在线观看一区| 国产成人一区二区三区| 国产精品第5页| 久久久噜噜噜| 国产精品88a∨| 自拍偷拍校园春色| 首页国产欧美日韩丝袜| 日韩av高清不卡| 精人妻无码一区二区三区| 久久精品人人做人人爽电影蜜月| 91精品国产亚洲| 综合激情网五月| 天堂资源在线中文精品| 国产v综合v亚洲欧美久久| 成人h动漫精品一区二区下载| 久久一区二区三区四区五区| 日韩av片免费在线观看| 欧美在线视频精品| 久久av中文字幕片| 91免费视频国产| 精品国产乱码一区二区三| 国产精品资源在线| 国产超碰91| 手机亚洲第一页| 2017欧美狠狠色| 色综合久久av| 成人video亚洲精品| 一区二区三区美女| 日本日本19xxxⅹhd乱影响| 成人欧美magnet| 欧美系列一区二区| 日本成人xxx| 人人香蕉久久| 色视频www在线播放国产成人 | 懂色av一区二区三区| 春日野结衣av| 国产精品久久久久久妇女| 在线播放国产精品二区一二区四区 | a级片在线免费观看| 色国产综合视频| 亚洲精品在线视频播放| 伦理一区二区| 中文字幕无线精品亚洲乱码一区 | 丝袜美腿高跟呻吟高潮一区| 国产欧美日韩专区发布| 狠狠躁日日躁夜夜躁av| 国产亚洲欧美日韩日本| 狠狠干视频网站| 中文字幕乱码中文乱码51精品| 欧美亚洲日本一区| 精品人妻一区二区免费| 精品日本12videosex| 欧美日韩福利视频| 日韩欧美一级大片| 不卡一区中文字幕| 亚洲日本无吗高清不卡| mm视频在线视频| 欧美日韩国产欧美日美国产精品| 中文字幕第九页| 日韩影院二区| 91精品国产高清久久久久久91 | 欧美大片顶级少妇| 免费看黄色三级| 亚洲美女少妇无套啪啪呻吟| 国产日韩在线视频| 免费在线黄色网址| 亚洲成人精品在线观看| 999这里有精品| 曰本一区二区三区视频| 欧美精品18videos性欧| 国产又粗又黄视频| 国产日本欧洲亚洲| 成人在线免费观看av| 少妇精品在线| 日韩日本欧美亚洲| 奴色虐av一区二区三区| 99久久精品国产毛片| 永久免费看av| 国产亚洲字幕| 久久久精品视频在线观看| 欧美一级淫片免费视频黄| 99久久伊人久久99| 免费超爽大片黄| 日韩三级久久| zzjj国产精品一区二区| 日韩乱码一区二区三区| 2020国产成人综合网| 国产h视频在线播放| 国产区精品视频在线观看豆花| 欧美成人精品影院| 国产免费无遮挡| 1024成人网色www| 久久久久久久久久久久久久久国产| 日本成人a网站| 国内精品久久久久久影视8| 性猛交富婆╳xxx乱大交天津| 亚洲视频一区二区在线| www.com污| 91国语精品自产拍| 亚洲精品日产aⅴ| 超碰免费公开在线| 日韩免费福利电影在线观看| 欧美成人aaa片一区国产精品| 国产一区日韩二区欧美三区| 亚洲一区尤物| 高清不卡一区| 欧美国产日韩中文字幕在线| www.国产欧美| 性久久久久久久久久久久| 美国黄色一级视频| 在线视频精品| 欧美日韩综合网| 99九九久久| 久久久精品免费| 亚洲经典一区二区三区| 天天综合色天天综合| 欧美做受喷浆在线观看| 玖玖国产精品视频| 亚洲欧美日韩精品久久久 | 久久久噜噜噜| 亚洲美女网站18| 精品国产麻豆| 性欧美激情精品| 久久久久久久久亚洲精品| 欧美专区在线观看一区| 国产午夜精品福利视频| 韩国理伦片一区二区三区在线播放| 日韩中文字幕在线不卡| 久久电影在线| 国产精品pans私拍| 国产精品一区二区三区视频网站| 日韩欧美你懂的| 国产成人精品网| 国产精品久久久久久久久果冻传媒| www.成人黄色| av成人毛片| 伊人色综合久久天天五月婷| 1769国产精品视频| 国产激情久久久| а√天堂8资源在线官网| 亚洲国产成人久久综合| 最近中文字幕在线观看视频| 亚洲美腿欧美偷拍| 免费看污黄网站在线观看| 另类小说综合欧美亚洲| 久久国产午夜精品理论片最新版本| 亚洲尤物av| 69174成人网| 日韩精品三区| 久久久久久综合网天天| a√资源在线| 亚洲精品动漫100p| 91亚洲精品国偷拍自产在线观看| 午夜精品久久久久久不卡8050| 亚洲ⅴ国产v天堂a无码二区| 成人高清免费观看| 日韩va在线观看| 可以免费看不卡的av网站| 欧美性受黑人性爽| 精品久久综合| 麻豆精品传媒视频| 婷婷视频一区二区三区| 国产精品成人在线| а√在线中文网新版地址在线| 精品国模在线视频| 九色国产在线观看| 亚洲福利视频在线| a天堂视频在线| 欧美性色黄大片| 欧美a∨亚洲欧美亚洲| 一区二区在线观看免费视频播放 | 色视频在线观看福利| 日韩一区二区视频| 亚洲最新av网站| 欧美伊人久久久久久午夜久久久久| 四虎永久在线精品| 亚洲自拍偷拍图区| www.av成人| 国产精品污www在线观看| 黄瓜视频污在线观看| 成人av电影免费在线播放| 日本女人黄色片| 久久成人av少妇免费| 天天影视综合色| 乱码第一页成人| 日本精品免费在线观看| 亚洲国产一区二区三区高清| 欧洲精品视频在线| 欧美片第1页综合| 2021狠狠干| 国产精品99一区二区三区| 亚洲精品成人a8198a| av中文字幕一区二区| 蜜桃传媒视频麻豆一区 | 亚洲午夜在线观看| 色一区二区三区四区| 色姑娘综合网| 欧美日韩国产免费观看视频| 日本一区免费在线观看| 在线视频亚洲专区| 蜜桃久久精品乱码一区二区| 噜噜噜天天躁狠狠躁夜夜精品| 精品国产综合| 日韩av不卡一区| 久草一区二区| 九九久久电影| 日韩欧美视频一区二区三区四区| 伊人精品一区| 亚洲一区二区四区| 欧美3p在线观看| 一区二区精品国产| 欧美在线播放| 欧美视频在线观看网站| 亚洲综合不卡| 在线观看高清免费视频| 六月婷婷色综合| 欧美精品色视频| 成人美女视频在线观看18| 亚洲国产综合视频| 久久蜜桃av一区精品变态类天堂 | 亚洲国产精品二区| 亚洲国产欧美一区二区三区同亚洲 | 亚洲精品在线视频观看| 97精品中文字幕| 国产成人三级视频| 亚洲作爱视频| 国产又大又黄又猛| 国产成人av影院| 国产吞精囗交久久久| 中文字幕av一区二区三区高| 少妇人妻丰满做爰xxx| 午夜不卡av免费| 影音先锋国产在线| 日韩欧美一级二级| 日本国产在线| 久久久国产视频| 亚洲天堂手机| 91亚洲国产成人精品性色| 老司机精品视频在线播放| 午夜精品一区二区三区四区 | 中文av一区特黄| 国产精品23p| 欧美三级在线看| 四季av日韩精品一区| 日韩在线视频网| 久久久男人天堂| 国产中文字幕日韩| 日韩高清一级| 黄色a级在线观看| 亚洲中午字幕| 国产麻豆剧传媒精品国产| 国产三级欧美三级| 国产一级做a爱免费视频| 欧美午夜一区二区| 内射无码专区久久亚洲| 最新69国产成人精品视频免费| 白白色在线观看| 成人午夜高潮视频| 亚欧洲精品视频在线观看| 色爽爽爽爽爽爽爽爽| 免费在线观看不卡| 欧美一区二区免费在线观看| 中文字幕在线观看一区二区| 国内自拍视频在线播放| 精品少妇一区二区三区| 毛片在线视频| 国产精品高潮呻吟久久av野狼| 综合激情网...| 亚洲天堂第一区| 久久国产精品72免费观看| 漂亮人妻被黑人久久精品| 综合久久给合久久狠狠狠97色| 国产一级淫片a视频免费观看| 精品久久国产老人久久综合| 老司机精品影院| 国产精品一区二区久久久| 九九久久婷婷| 日本不卡在线观看视频| 国产精品自拍av| 日韩影院一区二区| 欧美日韩黄色影视| 大片免费播放在线视频| 奇米成人av国产一区二区三区| 国产精品网在线观看| 日韩久久久久久久久久久久| 精彩视频一区二区| 亚洲色图27p| 欧美日韩不卡在线| 137大胆人体在线观看| 国产精品美女av| 日韩.com| 无限资源日本好片| 日本一区二区久久| 综合久久中文字幕| 中文字幕亚洲图片| 国产精品蜜月aⅴ在线| 午夜精品一区二区三区四区| 日本不卡高清视频| av黄色在线免费观看| 在线日韩国产精品| 黄色电影免费在线看| 青草青草久热精品视频在线网站 | 亚洲伦理网站| 日本一级淫片演员| 国产精品亚洲视频| 欧美人与禽zozzo禽性配| 91麻豆精品国产综合久久久久久 | 7m第一福利500精品视频| 超碰成人在线观看| 久在线观看视频| 久久美女高清视频| 国产三级理论片| 久久精品成人欧美大片古装| 国产一区 二区| 3d动漫一区二区三区| 久久精品一区蜜桃臀影院| 中文无码精品一区二区三区| 日韩中文字幕av| 国产精品久久久久久av公交车| 无颜之月在线看| 波多野结衣一区二区三区| 一级做a爰片久久毛片| 一区二区三区视频观看| gogo大尺度成人免费视频| 日韩欧美精品免费| 久久精品亚洲麻豆av一区二区| 中文字幕免费观看视频| 久热精品视频在线观看| 久久aimee| 亚洲精品自拍网| 亚洲最大成人综合| 日本大片在线观看| 国产在线高清精品| 亚洲激情二区| 手机毛片在线观看| 精品日韩欧美在线| 欧美性猛交xxx高清大费中文| 亚洲欧美日韩在线综合| 国产91高潮流白浆在线麻豆| 一级片视频在线观看| 久久福利视频导航| 香蕉人人精品| 原创真实夫妻啪啪av| 欧美性猛交xxxxx免费看| 欧美videos极品另类| 久久久久久久久久久久久9999| 久久av中文字幕片| www.国产毛片|