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

Protocol Buffers,一款比Xml快100倍的序列化框架!

開發
我們通常習慣用Json、XML等形式的數據存儲格式,但相信還有很多人沒有聽說過Protocol Buffer(簡稱protobuf)。protobuf是Google開源的一個語言無關、平臺無關的通信協議,其小巧、高效和友好的兼容性設計,使其被廣泛使用。

[[414951]]

本文轉載自微信公眾號「程序新視界」,作者二師兄。轉載本文請聯系程序新視界公眾號。

我們通常習慣用Json、XML等形式的數據存儲格式,但相信還有很多人沒有聽說過Protocol Buffer(簡稱protobuf)。protobuf是Google開源的一個語言無關、平臺無關的通信協議,其小巧、高效和友好的兼容性設計,使其被廣泛使用。性能比Json、XML真的強太多了!

而且,隨著微服務架構的流行,RPC框架也成為服務框架的重要組成部分。在很多RPC的設計中,都采用了高性能的編解碼技術,而protobuf就屬于其中的佼佼者。

也就說,要想深入了解微服務架構中的RPC環節底層實現,設計出高效的傳輸、序列化、編碼解碼等功能,學習protobuf的使用和原理非常有必要。

protobuf簡介

protobuf是一種序列化對象框架(或者說是編解碼框架)。它有兩部分功能組成:結構化數據(數據存儲結構)和序列化&反序列化。

其中數據存儲結構的作用與XML、JSON相似;序列化和反序列化的作用與Java自帶的序列化、Facebook的Thrift和JBoss Marshalling等相似。

總之:protobuf是通過定義結構化數據,并提供對數據的序列化和反序列化功能,從而實現數據存儲/RPC數據交換的功能。

它的特點是:

  • 語言無關、平臺無關
  • 簡潔
  • 高性能(序列化速度快 & 序列化后的數據體積小)
  • 良好的兼容性

可以通過數據直觀的看一下不同框架在序列化響應時間上的對比:

protobuf

可以看出,protobuf的性能要遠高于其他框架。

protobuf的使用流程

上面介紹了protobuf的功能,但僅僅知道這些功能我們無法知道它是怎么使用的??戳司W上很多的文章,要么直接開始寫代碼要么直接開始分析報文格式,對于新手來說往往會一頭霧水。

所以,我們先來梳理一下使用protobuf的步驟。

protobuf

在上圖中將protobuf的使用分了四個步驟:

  • 步驟一,搭建環境:使用protobuf要定義通信的數據結構,并編譯生成不同的編程語言代碼,這就需要有這么一個編譯器的環境。
  • 步驟二,構建數據:使用protobuf是要傳輸數據的,那么數據包含什么,有哪些項目,整個結構層次是什么樣子的。這里基于protobuf的語法來進行數據結構的定義。
  • 步驟三,項目集成:集成pom依賴(Java為例)、集成編譯的Java類(對照proto文件);
  • 步驟四,具體使用:通過集成進來的Java類,來構建消息、賦值,然后基于protobuf進行序列化,接收方進行反序列化操作;

了解了上述步驟,下面就針對具體的步驟來進行實戰演示。

這里演示基于Mac OS操作系統和Java編程語言來進行操作。如果你使用的是其他操作系統和編程語言,基本思路一樣,在不同的步驟時可針對性的找一下具體操作。

安裝Protocol Buffers

安裝protobuf是為了進行數據結構的定義和對應編程語言代碼的生成。通常有兩種方式:本地安裝和IDE插件。我們先來看本地安裝。

protobuf的代碼是托管在GitHub上的,對應地址為:https://github.com/protocolbuffers/protobuf 。

點擊項目右邊的release鏈接可看到對應版本:https://github.com/protocolbuffers/protobuf/releases 。

protobuf

這里包含了各種編程語言、環境的版本。本文選protobuf-java-3.17.3.zip版本。

在Mac操作系統下,需要先安裝一下依賴組件,才能夠對protobuf進行編譯和安裝。

安裝依賴組件:

  1. // 安裝 Protocol Buffer依賴 
  2. // 注:Protocol Buffer依賴于autoconf、automake、libtool、curl 
  3. brew install autoconf automake libtool curl 

解壓protobuf-java-3.17.3.zip,進入根目錄,執行以下命令:

  1. // 運行autogen.sh腳本 
  2. ./autogen.sh 
  3.  
  4. // 運行configure.sh腳本 
  5. ./configure 
  6.   
  7. // 編譯未編譯的依賴包 
  8. make 
  9.   
  10. // 檢查依賴包是否完整 
  11. make check 
  12.   
  13. // 開始安裝Protocol Buffer 
  14. make install 

安裝完成,檢驗版本:

  1. $protoc --version 
  2. libprotoc 3.14.0 

輸出版本信息,說明安裝成功。

這里的protoc命令就是Protocol Buffer的編譯器,可以將 .proto文件編譯成對應平臺的頭文件和源代碼文件。

另外一種方式就是安裝IDE插件,這里以IDEA為例,搜索插件:

protobuf

關于protobuf的插件比較多,選擇適合自己就行。

然后gRPC官方推薦了一種更優雅的使用姿勢,可以通過maven輕松搞定(需安裝上圖中的“Protobuf Support”插件)。也就是引入grpc的一些組件,然后在maven的build中進行配置,編譯proto文件成為Java代碼。此種方式暫時不展開,后續可直接看項目集成部分的源代碼。

構建數據

在Java中,如果通過JSON來傳輸一個數據,我們首先要定義一個對象,這里以Person為例:

  1. public class Person { 
  2.     private String name
  3.     private Integer id; 
  4.     // ... getter/setter 

那么,如果用protobuf來定義Person這個對象的數據結構是什么樣呢?

先創建一個person.proto文件,然后定義如下的結構:

  1. syntax = "proto3"; // 聲明為protobuf 3定義文件 
  2. package tutorial; 
  3.  
  4. option java_package = "com.choupangxia.protobuf.message"; // 聲明生成消息類的java包路徑 
  5. option java_outer_classname = "Person";  // 聲明生成消息類的類名 
  6.  
  7. message PersonProto { 
  8.     string name = 1; 
  9.     int32 id = 2; 

上面每項語法的具體說明可參看注釋部分。當然Person的結構可以更豐富,這里只是出于演示需要,做了最簡單的示例,更多語法可參看官方文檔。

編譯protot文件

定義完成之后,我們可以通過兩種方式來生成目標Java類。這里先采用本機安裝的編譯器來進行操作。

執行protoc命令之前,可先執行-h命令來查看protoc的使用說明:

  1. protoc -h 

進入person.proto文件所在目錄,執行以下命令進行編譯:

  1. protoc --java_out=../java ./person.proto 

--java_out參數指定了Java類的輸出路徑,第二個參數執行的要編譯的文件為當前目錄下的person.proto文件。

執行命令,會發現com.choupangxia.protobuf.message下生成了名為Person的類。注意proto中定義的message名稱不要與Java類名重復,否則會出現命令執行失敗的狀況。

對應的Person類比較復雜,甚至有一些語法層面的錯誤或改進,如果需要,進行對應的改進優化即可。

protobuf

上圖為生成的Person類的部分結構。比如上面的java.lang.String getName()這個方法的返回值就可以進行優化,不用指定String的package。

項目集成

其實上面講生成的Person代碼放入項目,已經算是項目集成的一部分了。如果未引入protobuf的依賴,上面的代碼還是會報錯的。

Maven項目的pom文件中添加protobuf依賴:

  1. <dependency> 
  2.     <groupId>com.google.protobuf</groupId> 
  3.     <artifactId>protobuf-java</artifactId> 
  4.     <version>3.17.3</version> 
  5. </dependency> 

如果想通過IDEA直接編譯proto文件,需安裝“Protobuf Support”插件,還需引入grpc的依賴,完整依賴如下:

  1. <properties> 
  2.     <grpc.version>1.6.1</grpc.version> 
  3.     <protobuf.version>3.17.3</protobuf.version> 
  4. </properties> 
  5.  
  6. <dependencies> 
  7.     <dependency> 
  8.         <groupId>com.google.protobuf</groupId> 
  9.         <artifactId>protobuf-java</artifactId> 
  10.         <version>${protobuf.version}</version> 
  11.     </dependency> 
  12.     <!-- 編譯使用部分 --> 
  13.     <dependency> 
  14.         <groupId>io.grpc</groupId> 
  15.         <artifactId>grpc-netty</artifactId> 
  16.         <version>${grpc.version}</version> 
  17.         <scope>provided</scope> 
  18.     </dependency> 
  19.     <dependency> 
  20.         <groupId>io.grpc</groupId> 
  21.         <artifactId>grpc-protobuf</artifactId> 
  22.         <version>${grpc.version}</version> 
  23.         <scope>provided</scope> 
  24.     </dependency> 
  25.     <dependency> 
  26.         <groupId>io.grpc</groupId> 
  27.         <artifactId>grpc-stub</artifactId> 
  28.         <version>${grpc.version}</version> 
  29.         <scope>provided</scope> 
  30.     </dependency> 
  31. </dependencies> 
  32. <build> 
  33.     <extensions> 
  34.         <extension> 
  35.             <groupId>kr.motd.maven</groupId> 
  36.             <artifactId>os-maven-plugin</artifactId> 
  37.             <version>1.5.0.Final</version> 
  38.         </extension> 
  39.     </extensions> 
  40.     <plugins> 
  41.         <plugin> 
  42.             <groupId>org.xolstice.maven.plugins</groupId> 
  43.             <artifactId>protobuf-maven-plugin</artifactId> 
  44.             <version>0.5.0</version> 
  45.             <configuration> 
  46.                 <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact> 
  47.                 <pluginId>grpc-java</pluginId> 
  48.                 <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact> 
  49.             </configuration> 
  50.             <executions> 
  51.                 <execution> 
  52.                     <goals> 
  53.                         <goal>compile</goal> 
  54.                         <goal>compile-custom</goal> 
  55.                     </goals> 
  56.                 </execution> 
  57.             </executions> 
  58.         </plugin> 
  59.     </plugins> 
  60. </build> 

在執行執行maven compile命令進行編譯之前,將需要編譯的proto文件放在與src/main/java同級目錄下的/src/main/proto目錄。

protobuf

此時將生成的Java復制到對應的包下即可。

業務應用

一切準備就緒,現在就來寫個例子使用對應的代碼了。

  1. public class Test { 
  2.  
  3.     public static void main(String[] args) throws InvalidProtocolBufferException { 
  4.         Person.PersonProto sourcePersonProto = Person.PersonProto.newBuilder().setId(123).setName("Tom").build(); 
  5.  
  6.         // 序列化 
  7.         byte[] binaryInfo = sourcePersonProto.toByteArray(); 
  8.         System.out.println("序列化字節碼內容:" + Arrays.toString(binaryInfo)); 
  9.         System.out.println("序列化字節碼長度:" + binaryInfo.length); 
  10.  
  11.         System.out.println("-----------以下為接收方反序列化操作-------------"); 
  12.         // 反序列化 
  13.         Person.PersonProto targetPersonProto = Person.PersonProto.parseFrom(binaryInfo); 
  14.  
  15.         System.out.println("反序列化結果:" + targetPersonProto.toString()); 
  16.     } 

上述代碼就是基于生成的Person類的基本使用。首先通過,Person類中的內部類和Builder方法進行參數的封裝,然后調用其toByteArray方法,即可將報文信息進行序列化。接收方呢,有同樣的一套代碼,先獲得Person.PersonProto對象,然后執行parseFrom方法即可進行反序列化操作。

為什么protobuf比較高效

單從序列化后的數據體積角度來分析。與XML、JSON這類文本協議相比,ProtoBuf通過T-(L)-V(TAG-LENGTH-VALUE)方式編碼,不需要", {, }, :等分隔符來結構化信息。同時在編碼層面使用varint壓縮,所以描述同樣的信息,protobuf序列化后的體積要小很多,在網絡中傳輸消耗的網絡流量更少,進而對于網絡資源緊張、性能要求非常高的場景,ProtoBuf協議是不錯的選擇。

做一個簡單直觀的例子:

  1. {"id":1,"firstName":"Chris","lastName":"Richardson","email":[{"type":"PROFESSIONAL","email":"aicchrrdson@email.com"}]} 

對于上面的JSON數據,使用JSON序列化后的數據大小為118byte,而使用protobuf序列化后的數據大小為48byte。如果數據量更多,層次結構更復雜,差距還是很明顯的。

從序列化/反序列化速度角度,與XML、JSON相比,protobuf序列化/反序列化的速度更快,比XML要快20-100倍。

但protobuf是基于二進制的協議,編碼后的數據可讀性差,如果沒有idl文件,就無法理解二進制數據流,對調試不友好。

小結

本文帶大家從0到1學習了protobuf的使用步驟。很多文章之所以看不懂,就是因為沒有梳理清楚使用protobuf的整個核心邏輯。只要掌握了如何搭建環境、如何編寫數據結構、如何編譯、如何集成到項目中并運用。那么,protobuf的其他知識點逐步在實踐中補充即可。

隨著微服務的不斷發展,RPC框架為了追求高效的通信,使用像protobuf這類框架也必然是趨勢。也是想更好的學習微服務架構的底層的必備知識。 

本文源碼:https://github.com/secbr/protobuf-demo

 

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2023-08-30 11:21:32

RPCC++API

2011-05-18 15:20:13

XML

2021-05-06 10:52:09

Java Spring Bo框架

2012-04-13 10:45:59

XML

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2011-06-01 14:26:11

序列化

2009-09-09 17:14:24

XML序列化

2015-11-25 14:39:51

LiFiWiFi

2010-01-08 13:25:07

ibmdwXML

2019-08-06 17:19:22

開源技術 趨勢

2022-10-27 08:31:31

架構

2021-07-23 16:50:19

httpJava框架

2024-01-23 11:28:14

Eslint前端Oxlint

2009-09-09 15:54:48

C# XML序列化

2009-08-25 14:59:39

C# XML序列化應用

2011-06-01 15:05:02

序列化反序列化

2024-03-26 10:13:54

日志引擎SigLens

2022-08-06 08:41:18

序列化反序列化Hessian

2019-06-19 10:00:45

vue.jsimbajavascript
點贊
收藏

51CTO技術棧公眾號

国语对白精品一区二区| 国产在线精品一区免费香蕉 | 成人av网站大全| 国产福利视频网站| 亚洲精品中文字| 青青草原在线亚洲| 最新黄色av网址| 亚洲精品av在线播放| 涩涩视频在线观看免费| 国产精品一区二区女厕厕| 天堂在线亚洲视频| 这里只有精品6| 91麻豆国产语对白在线观看| 99久久婷婷国产精品综合| 国产黄色av片| 成人在线观看网址| 久久爱www久久做| 中文字幕免费观看视频| 在线视频欧美日韩精品| 欧美精选视频在线观看| 艳妇乳肉亭妇荡乳av| 国产伦精品一区二区三区在线观看| 影音先锋人妻啪啪av资源网站| 色综合久久99| 国产又大又粗又硬| 国产日韩欧美一区二区三区四区| 中文字幕久久午夜不卡| 欧美黑人激情| 亚洲综合在线播放| 国产欧美日韩精品一区| 99久久国产免费| 国产精品99一区| 日韩高清中文字幕一区| 日韩成人短视频| 日韩在线视频播放| 噜噜噜躁狠狠躁狠狠精品视频 | 特级西西人体4444xxxx| 香蕉成人伊视频在线观看| 345成人影院| 国产综合av在线| 欧美性三三影院| 91精品一久久香蕉国产线看观看| 亚洲精品中文字幕在线| 自拍偷拍亚洲综合| 日本另类视频| 久久精品国产露脸对白| www.欧美精品| 狠狠爱www人成狠狠爱综合网| 亚洲 欧美 中文字幕| 麻豆国产va免费精品高清在线| 亚洲第一福利社区| 欧产日产国产69| 久热精品视频在线观看一区| av在线不卡免费观看| 中国女人特级毛片| 免费av一区二区| 男男视频亚洲欧美| 欧美13videosex性极品| xxxx在线免费观看| 欧美日韩1区2区| 999久久久久久久久6666| 久久视频精品在线观看| 国产欧美精品一区二区三区介绍 | 亚洲国产天堂网精品网站| 日韩午夜av| 91社区在线观看播放| 波多野结衣家庭教师视频| 色88888久久久久久影院野外| 精品中文一区| 农村妇女精品一区二区| 91视频最新| 成人一区二区视频| 麻豆tv免费在线观看| 久久久久人妻精品一区三寸| 亚洲色图日韩av| 亚洲在线免费| 少妇人妻精品一区二区三区| 久久精品ww人人做人人爽| 国产精品成人一区二区艾草 | h色网站在线观看| 国产精品久久久久久久7电影| 久久亚洲色图| 日韩av成人| 奇米777在线| 久久久久久国产| 中文字幕亚洲一区二区av在线 | 色偷偷久久一区二区三区| 任你弄精品视频免费观看| 欧美黄色免费在线观看| 特色特色大片在线| 欧美精品在线视频| 激情视频亚洲| 国产寡妇亲子伦一区二区三区四区| 欧美一区二区高清在线观看| 日韩一区二区三区视频在线| 欧美a一区二区| 无码国产色欲xxxx视频| 经典三级在线视频| 日韩高清欧美高清| 午夜一级久久| av文字幕在线观看| www.av欧美| 91免费版黄色| 中文字幕不卡一区| 日韩一区中文| 日韩精品1区2区| 不卡视频一区二区三区| 精品久久久久久久久久久久久| 欧美美女在线观看| 久久久久99精品成人片我成大片| 欧美一区二区三区四区夜夜大片 | 美女黄色免费看| 综合国产在线视频| 中文字幕成人av| 国产精品视屏| 在线中文免费视频| 天天操天天摸天天干| 日韩精品第1页| 制服.丝袜.亚洲.中文.综合| 国产二区精品| 国产三级电影在线| 精品国产一区二区三区四| 人妻少妇偷人精品久久久任期| 91在线观看免费高清| 亚洲天堂2016| 在线播放日韩| 欧美大片免费| av网站免费大全| 波多野结衣作品集| 国产精品情侣自拍| 制服视频三区第一页精品| 国产美女娇喘av呻吟久久| 69av成人| 在线能看的av| 99视频在线视频| **亚洲第一综合导航网站| 精品国产自在久精品国产| 成人一区二区三区在线观看 | 久久久久在线观看| 日韩亚洲欧美在线| 最新热久久免费视频| 三级久久三级久久| 欧美a大片欧美片| 国产男男gay网站| 日本爱爱爱视频| 国产成人综合一区| 一区二区三区四区视频在线观看 | 国产色综合网| 亚洲男人天堂网址| www男人天堂| www成人免费| 成人黄色av播放免费| 中文字幕无线精品亚洲乱码一区 | 国产又粗又猛又爽又黄的视频四季| 日本男女交配视频| 成人免费激情视频| 亚洲欧美色图片| 午夜精品aaa| 水野朝阳av一区二区三区| 波多野结衣在线播放一区| 欧美r级在线| 人人草在线观看| 熟女俱乐部一区二区| 国产极品在线视频| 一区二区三区四区视频在线| 国产精品国产精品国产专区蜜臀ah | 成人高潮aa毛片免费| 中文字幕一区二区人妻| 欧美成人一区二区三区高清| 国产精品久久久久久久av福利| 成人精品视频在线播放| 欧美一级免费看| 91精品国产色综合久久ai换脸| 国产精品你懂的| 伊人成人在线视频| 精品国产91乱码一区二区三区四区 | www.欧美三级电影.com| 亚洲精品在线电影| 亚洲另类在线一区| 99精品黄色片免费大全| 成人夜色视频网站在线观看| 91高清一区| 成人国产精品一级毛片视频| 最新av在线播放| 国产中文字幕在线观看| 五月婷婷六月激情| 在线免费黄色av| theav精尽人亡av| 免费黄色av网址| 性猛交╳xxx乱大交| 草草草在线视频| 国产一二三四区在线观看| 久久国产欧美精品| 日本a级片电影一区二区| 97香蕉久久夜色精品国产| 精品美女一区二区三区| 岛国视频午夜一区免费在线观看| 波多野结衣91| 日本中文字幕不卡| 国产日韩欧美高清免费| 日本一区影院| 色爱综合区网| 性欧美videos高清hd4k| 亚洲国产精品视频在线| 日本韩国欧美中文字幕| 国产精品无码无卡无需播放器| 少妇精品一区二区三区| 美女被爆操网站| 久久久久成人精品无码中文字幕| 国产美女视频免费观看下载软件| 亚洲色图久久久| 亚洲欧美自拍一区| 国产一区二区三区三区在线观看| 精品成人私密视频| 亚洲欧美一区二区三区久久| 亚洲国产中文字幕久久网 | 日本免费高清不卡| 九九九久久久| 一本色道久久综合亚洲精品婷婷| 久久天堂国产精品| 一区二区三区精品国产| 国产精品一二三在线观看| 日本一区视频在线| 国产精品亚洲天堂| 国产欧美日韩网站| 国产精品99久久免费黑人人妻| 日本福利视频在线| 欧美精品一区三区在线观看| 久久精品一二三区| 日本一级黄视频| 国产一区二区片| 国产av天堂无码一区二区三区| 超碰在线公开97| 国产精品成人免费一区久久羞羞| xxxxwww一片| 神马久久精品综合| 亚洲 国产 日韩 欧美| 中文天堂在线视频| 成人亚洲综合天堂| av免费看在线| 黑人巨大精品| 国产一区二区三区免费在线 | 美女999久久久精品视频| zzjj国产精品一区二区| 国内精品在线一区| 国产三区二区一区久久| 一区二区精品在线观看| 日b视频免费观看| 91插插插影院| 日韩一卡二卡在线观看| 西西44rtwww国产精品| 一区二区的视频| 欧美特级特黄aaaaaa在线看| 在线免费av导航| 电影91久久久| 日韩精品一卡二卡三卡四卡无卡| 久久久蜜桃精品| 亚洲国产91精品在线观看| 九九久久综合网站| 国产精品久久一区| 男人天堂网站在线| 国产无套精品一区二区三区| 久久露脸国语精品国产91| 神马久久久久久久久久| 成人黄色毛片| 四季av一区二区三区免费观看 | 666av成人影院在线观看| 女生影院久久| 亚洲黄色录像| 在线电影一区二区| 国产精品乱码人人做人人爱| 亚洲国产精品小视频| 91精品久久久久久久久不口人| 欧美黑人在线观看| 好吊色视频一区二区三区| 99久热在线精品996热是什么| 男男电影完整版在线观看| 成人1区2区| 黄色另类av| 中文字幕一区免费在线观看| 亚洲第一中文字幕| 国内精品二区| 亚洲天堂网站在线| 色网站在线播放| 高清美女视频一区| 成人高清av| 久久综合久久久久88| 好吊成人免视频| 欧美精品在线网站| 成年人观看网站| av图片在线观看| 日韩av影片| 国产一区二区三区久久久久久久久 | 国产一区二区三区久久久久久久久| 亚洲色大成网站www久久九九| 在线观看国产成人av片| 国产亚洲情侣一区二区无| 成人午夜剧场视频网站| 凸凹人妻人人澡人人添| 久久综合色占| 国产精品成人免费在线| 久久久国产91| 日韩一区国产在线观看| 久久久久久久高清| 亚洲不卡视频在线观看| 91麻豆精品国产综合久久久 | 成年网站免费在线观看| 国产视频在线免费观看| 亚洲瘦老头同性70tv| 久久综合九色欧美综合狠狠 | 韩国av中国字幕| 三级网站免费观看| 国产欧美三级电影| 丰满白嫩尤物一区二区| 精品美女在线播放| 伊人久久av导航| 91video| 免费成人美女女| 国产成人综合在线| 久久亚洲国产精品| 熟妇人妻va精品中文字幕| 国产又大又粗又爽| 激情小说亚洲| 91丝袜呻吟高潮美腿白嫩在线观看| 中文字幕欧美专区| 欧美人与动牲交xxxxbbbb| 偷偷操不一样的久久| 1204国产成人精品视频| 国产精品久久久久永久免费观看| **欧美日韩vr在线| av无码精品一区二区三区| 午夜精品三级久久久有码| 欧美一区一区| 国产精品美女久久久久高潮 | 最新欧美日韩亚洲| 一级特黄aa大片| 日韩精品久久| 欧美视频在线观看一区二区| 91亚洲国产成人久久精品网站| 自拍偷拍第9页| 91精品视频一区二区| 1000部国产精品成人观看| 114国产精品久久免费观看| 久一区二区三区| 欧美不卡高清一区二区三区| 久久综合色婷婷| 国产色视频一区| 国产做受高潮漫动| 日韩欧美美女在线观看| 色先锋久久av资源部| 成人做爰66片免费看网站| 日韩精品一区二区在线播放| 欧美亚洲国产精品久久| 欧美亚洲动漫制服丝袜| 国产在线视频综合| 欧美 日韩 中文字幕| 国产日韩亚洲| 自拍偷拍亚洲区| 午夜视频你懂的| 在线视频婷婷| 国产在线麻豆精品观看| 欧美在线激情视频| 亚洲精品国产一区黑色丝袜| 3d动漫一区二区三区在线观看| 亚洲激情校园春色| 国产中文欧美精品| 日本视频免费观看| 亚洲一区黄色| 欧美刺激性大交免费视频| 国产精品一级黄片| 久草在线资源站手机版| 99在线热播精品免费| 91精品久久久久久久久| 91成人一区二区三区| 欧美日韩精品| 一本一本久久a久久精品综合小说| 国产精欧美一区二区三区白种人| 高清毛片在线观看| 中文字幕乱码一区二区免费| 激情伦成人综合小说| 亚洲性在线观看| 美女一区二区视频| 91嫩草免费看| 91麻豆成人精品国产免费网站| 国产午夜精品一区二区三区欧美| 欧美成在线视频| 欧美日韩在线视频免费| 婷婷综合电影| 日韩www在线| 中文字幕第九页| 这里视频有精品| 精品国产制服丝袜高跟| 日韩黄色片视频| 国产极品在线观看| 国产精品国产三级国产| 欧美日韩在线精品| 天堂av中文在线资源库| 99久久久无码国产精品| 欧美日韩精品免费看| 日韩精品毛片|