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

壓縮20M文件從30秒到1秒的優化過程

開發 后端
隨著前端所傳圖片的大小越來越大的時候,耗費的時間也在急劇增加,最后測了一下壓縮20M的文件竟然需要30秒的時間。

 [[274403]]

有一個需求需要將前端傳過來的10張照片,然后后端進行處理以后壓縮成一個壓縮包通過網絡流傳輸出去。之前沒有接觸過用Java壓縮文件的,所以就直接上網找了一個例子改了一下用了,改完以后也能使用,但是隨著前端所傳圖片的大小越來越大的時候,耗費的時間也在急劇增加,最后測了一下壓縮20M的文件竟然需要30秒的時間。壓縮文件的代碼如下。 

  1. public static void zipFileNoBuffer() {  
  2.     File zipFile = new File(ZIP_FILE);  
  3.     try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile))) {  
  4.         //開始時間  
  5.         long beginTime = System.currentTimeMillis();  
  6.         for (int i = 0; i < 10; i++) {  
  7.             try (InputStream input = new FileInputStream(JPG_FILE)) {  
  8.                 zipOut.putNextEntry(new ZipEntry(FILE_NAME + i));  
  9.                 int temp = 0 
  10.                 while ((temp = input.read()) != -1) {  
  11.                     zipOut.write(temp);  
  12.                 }  
  13.             }  
  14.         }  
  15.         printInfo(beginTime);  
  16.     } catch (Exception e) {  
  17.         e.printStackTrace();  
  18.     }  

這里找了一張2M大小的圖片,并且循環十次進行測試。打印的結果如下,時間大概是30秒。 

  1. fileSize:20M  
  2. consum time:29599 

第一次優化過程-從30秒到2秒

進行優化首先想到的是利用緩沖區BufferInputStream。在FileInputStream中read()方法每次只讀取一個字節。源碼中也有說明。 

  1. /**  
  2.  * Reads a byte of data from this input stream. This method blocks  
  3.  * if no input is yet available.  
  4.  *  
  5.  * @return     the next byte of data, or <code>-1</code> if the end of the  
  6.  *             file is reached.  
  7.  * @exception  IOException  if an I/O error occurs.  
  8.  */  
  9. public native int read() throws IOException; 

這是一個調用本地方法與原生操作系統進行交互,從磁盤中讀取數據。每讀取一個字節的數據就調用一次本地方法與操作系統交互,是非常耗時的。例如我們現在有30000個字節的數據,如果使用FileInputStream那么就需要調用30000次的本地方法來獲取這些數據,而如果使用緩沖區的話(這里假設初始的緩沖區大小足夠放下30000字節的數據)那么只需要調用一次就行。因為緩沖區在第一次調用read()方法的時候會直接從磁盤中將數據直接讀取到內存中。隨后再一個字節一個字節的慢慢返回。

> BufferedInputStream內部封裝了一個byte數組用于存放數據,默認大小是8192。

優化過后的代碼如下: 

  1. public static void zipFileBuffer() {  
  2.     File zipFile = new File(ZIP_FILE);  
  3.     try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));  
  4.             BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(zipOut)) {  
  5.         //開始時間  
  6.         long beginTime = System.currentTimeMillis();  
  7.         for (int i = 0; i &lt; 10; i++) {  
  8.             try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(JPG_FILE))) {  
  9.                 zipOut.putNextEntry(new ZipEntry(FILE_NAME + i));  
  10.                 int temp = 0 
  11.                 while ((temp = bufferedInputStream.read()) != -1) {  
  12.                     bufferedOutputStream.write(temp);  
  13.                 }  
  14.             }  
  15.         }  
  16.         printInfo(beginTime);  
  17.     } catch (Exception e) {  
  18.         e.printStackTrace();  
  19.     }  

輸出 

  1. ------Buffer  
  2. fileSize:20M  
  3. consum time:1808 

可以看到相比較于第一次使用FileInputStream效率已經提升了許多了。

第二次優化過程-從2秒到1秒

使用緩沖區buffer的話已經是滿足了我的需求了,但是秉著學以致用的想法,就想著用NIO中知識進行優化一下。

使用Channel

為什么要用Channel呢?因為在NIO中新出了Channel和ByteBuffer。正是因為它們的結構更加符合操作系統執行I/O的方式,所以其速度相比較于傳統IO而言速度有了顯著的提高。Channel就像一個包含著煤礦的礦藏,而ByteBuffer則是派送到礦藏的卡車。也就是說我們與數據的交互都是與ByteBuffer的交互。

在NIO中能夠產生FileChannel的有三個類。分別是FileInputStream、FileOutputStream、以及既能讀又能寫的RandomAccessFile。

源碼如下: 

  1. public static void zipFileChannel() {  
  2.     //開始時間  
  3.     long beginTime = System.currentTimeMillis();  
  4.     File zipFile = new File(ZIP_FILE);  
  5.     try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));  
  6.             WritableByteChannel writableByteChannel = Channels.newChannel(zipOut)) {  
  7.         for (int i = 0; i &lt; 10; i++) {  
  8.             try (FileChannel fileChannel = new FileInputStream(JPG_FILE).getChannel()) {  
  9.                 zipOut.putNextEntry(new ZipEntry(i + SUFFIX_FILE));  
  10.                 fileChannel.transferTo(0, FILE_SIZE, writableByteChannel);  
  11.             }  
  12.         }  
  13.         printInfo(beginTime);  
  14.     } catch (Exception e) {  
  15.         e.printStackTrace();  
  16.     }  

我們可以看到這里并沒有使用ByteBuffer進行數據傳輸,而是使用了transferTo的方法。這個方法是將兩個通道進行直連。 

  1. This method is potentially much more efficient than a simple loop  
  2. * that reads from this channel and writes to the target channel.  Many  
  3. * operating systems can transfer bytes directly from the filesystem cache  
  4. * to the target channel without actually copying them.  

這是源碼上的描述文字,大概意思就是使用transferTo的效率比循環一個Channel讀取出來然后再循環寫入另一個Channel好。操作系統能夠直接傳輸字節從文件系統緩存到目標的Channel中,而不需要實際的copy階段。

> copy階段就是從內核空間轉到用戶空間的一個過程

可以看到速度相比較使用緩沖區已經有了一些的提高。 

  1. ------Channel  
  2. fileSize:20M  
  3. consum time:1416 

內核空間和用戶空間

那么為什么從內核空間轉向用戶空間這段過程會慢呢?首先我們需了解的是什么是內核空間和用戶空間。在常用的操作系統中為了保護系統中的核心資源,于是將系統設計為四個區域,越往里權限越大,所以Ring0被稱之為內核空間,用來訪問一些關鍵性的資源。Ring3被稱之為用戶空間。

> 用戶態、內核態:線程處于內核空間稱之為內核態,線程處于用戶空間屬于用戶態

那么我們如果此時應用程序(應用程序是都屬于用戶態的)需要訪問核心資源怎么辦呢?那就需要調用內核中所暴露出的接口用以調用,稱之為系統調用。例如此時我們應用程序需要訪問磁盤上的文件。此時應用程序就會調用系統調用的接口open方法,然后內核去訪問磁盤中的文件,將文件內容返回給應用程序。大致的流程如下

直接緩沖區和非直接緩沖區

既然我們要讀取一個磁盤的文件,要廢這么大的周折。有沒有什么簡單的方法能夠使我們的應用直接操作磁盤文件,不需要內核進行中轉呢?有,那就是建立直接緩沖區了。

  •  非直接緩沖區:非直接緩沖區就是我們上面所講內核態作為中間人,每次都需要內核在中間作為中轉。
  •  直接緩沖區:直接緩沖區不需要內核空間作為中轉copy數據,而是直接在物理內存申請一塊空間,這塊空間映射到內核地址空間和用戶地址空間,應用程序與磁盤之間數據的存取通過這塊直接申請的物理內存進行交互。

既然直接緩沖區那么快,我們為什么不都用直接緩沖區呢?其實直接緩沖區有以下的缺點。直接緩沖區的缺點:

  1.  不安全
  2.  消耗更多,因為它不是在JVM中直接開辟空間。這部分內存的回收只能依賴于垃圾回收機制,垃圾什么時候回收不受我們控制。
  3.  數據寫入物理內存緩沖區中,程序就喪失了對這些數據的管理,即什么時候這些數據被最終寫入從磁盤只能由操作系統來決定,應用程序無法再干涉。

> 綜上所述,所以我們使用transferTo方法就是直接開辟了一段直接緩沖區。所以性能相比而言提高了許多

使用內存映射文件

NIO中新出的另一個特性就是內存映射文件,內存映射文件為什么速度快呢?其實原因和上面所講的一樣,也是在內存中開辟了一段直接緩沖區。與數據直接作交互。源碼如下: 

  1. //Version 4 使用Map映射文件  
  2. public static void zipFileMap() {  
  3.     //開始時間  
  4.     long beginTime = System.currentTimeMillis();  
  5.     File zipFile = new File(ZIP_FILE);  
  6.     try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));  
  7.             WritableByteChannel writableByteChannel = Channels.newChannel(zipOut)) {  
  8.         for (int i = 0; i &lt; 10; i++) {  
  9.             zipOut.putNextEntry(new ZipEntry(i + SUFFIX_FILE));  
  10.             //內存中的映射文件  
  11.             MappedByteBuffer mappedByteBuffer = new RandomAccessFile(JPG_FILE_PATH, "r").getChannel()  
  12.                     .map(FileChannel.MapMode.READ_ONLY, 0, FILE_SIZE);  
  13.             writableByteChannel.write(mappedByteBuffer);  
  14.         }  
  15.         printInfo(beginTime);  
  16.     } catch (Exception e) {  
  17.         e.printStackTrace();  
  18.     }  

打印如下: 

  1. ---------Map  
  2. fileSize:20M  
  3. consum time:1305 

可以看到速度和使用Channel的速度差不多的。

使用Pipe

Java NIO 管道是2個線程之間的單向數據連接。Pipe有一個source通道和一個sink通道。其中source通道用于讀取數據,sink通道用于寫入數據。可以看到源碼中的介紹,大概意思就是寫入線程會阻塞至有讀線程從通道中讀取數據。如果沒有數據可讀,讀線程也會阻塞至寫線程寫入數據。直至通道關閉。 

  1. Whether or not a thread writing bytes to a pipe will block until another  
  2.  thread reads those bytes 

我想要的效果是這樣的。源碼如下: 

  1. //Version 5 使用Pip  
  2. public static void zipFilePip() {  
  3.     long beginTime = System.currentTimeMillis();  
  4.     try(WritableByteChannel out = Channels.newChannel(new FileOutputStream(ZIP_FILE))) {  
  5.         Pipe pipe = Pipe.open();  
  6.         //異步任務  
  7.         CompletableFuture.runAsync(()-&gt;runTask(pipe));  
  8.         //獲取讀通道  
  9.         ReadableByteChannel readableByteChannel = pipe.source();  
  10.         ByteBuffer buffer = ByteBuffer.allocate(((int) FILE_SIZE)*10);  
  11.         while (readableByteChannel.read(buffer)&gt;= 0) {  
  12.             buffer.flip();  
  13.             out.write(buffer);  
  14.             buffer.clear();  
  15.         }  
  16.     }catch (Exception e){  
  17.         e.printStackTrace();  
  18.     }  
  19.     printInfo(beginTime);  
  20.  
  21. //異步任務  
  22. public static void runTask(Pipe pipe) {  
  23.     try(ZipOutputStream zos = new ZipOutputStream(Channels.newOutputStream(pipe.sink()));  
  24.             WritableByteChannel out = Channels.newChannel(zos)) {  
  25.         System.out.println("Begin");  
  26.         for (int i = 0; i &lt; 10; i++) {  
  27.             zos.putNextEntry(new ZipEntry(i+SUFFIX_FILE));  
  28.             FileChannel jpgChannel = new FileInputStream(new File(JPG_FILE_PATH)).getChannel();  
  29.             jpgChannel.transferTo(0, FILE_SIZE, out);  
  30.             jpgChannel.close();  
  31.         }  
  32.     }catch (Exception e){  
  33.         e.printStackTrace();  
  34.     }  

總結

  •  生活處處都需要學習,有時候只是一個簡單的優化,可以讓你深入學習到各種不同的知識。所以在學習中要不求甚解,不僅要知道這個知識也要了解為什么要這么做。
  •  知行合一:學習完一個知識要盡量應用一遍。這樣才能記得牢靠。 

 

責任編輯:龐桂玉 來源: 中國開源
相關推薦

2020-11-12 18:51:43

Java編程語言

2025-06-27 09:05:47

2017-12-25 11:15:06

JavaArray數組

2025-06-25 09:30:14

2022-09-26 09:41:25

MySQL數據庫

2021-08-26 22:26:55

性能優化技術

2025-08-18 03:00:22

Spring樹形結構分類樹

2025-03-27 00:14:10

2019-01-30 09:34:56

ElasticSearLogstashKibana

2013-11-11 11:17:45

AngularJS性能優化

2025-06-04 02:20:00

SQL優化儀表盤

2011-09-29 09:57:27

Ubuntu 11.1

2012-07-24 09:37:19

寬帶光纖

2010-08-19 09:36:28

飛輪儲能UPS飛輪UPS

2024-11-08 09:34:54

2024-05-06 10:11:51

2015-11-23 17:34:33

秒借

2024-11-01 12:10:57

2019-09-27 17:24:26

數據庫優化sql

2024-11-08 15:08:17

點贊
收藏

51CTO技術棧公眾號

亚洲tv在线| 日韩欧美中文字幕一区二区| 第一福利在线视频| 99久久综合狠狠综合久久| 国产xxx69麻豆国语对白| 中文天堂资源在线| 日日夜夜精品视频| 日韩欧美在线字幕| 在线观看欧美激情| 手机在线观看免费av| 日韩国产欧美在线观看| 理论片在线不卡免费观看| 性少妇bbw张开| 国产精品日本一区二区不卡视频| 精品欧美激情精品一区| 超碰在线免费观看97| 四虎电影院在线观看| 狠狠色综合播放一区二区| 91精品国产高清久久久久久久久| 日本女人性生活视频| 女同久久另类99精品国产| 91精品啪在线观看国产60岁| 国产在线青青草| 超鹏97在线| 国产午夜精品美女毛片视频| 国产日韩精品久久| 国产超碰人人模人人爽人人添| 日韩不卡一区二区| 青青青国产精品一区二区| 久久久99精品| 欧美在线网址| 日韩中文第一页| 国产免费一区二区三区网站免费| 国产精品极品| 欧美哺乳videos| 男人午夜视频在线观看| 国产精品xxx| 色婷婷综合在线| 99精品在线免费视频| 欧美高清另类hdvideosexjaⅴ| 国产精品久久久久久福利一牛影视| 久久综合九色综合久99| 天天操天天操天天操| 成人蜜臀av电影| 国产高清一区视频| www久久久com| 国产精品888| 96国产粉嫩美女| 97在线视频人妻无码| 久久精品av麻豆的观看方式| 国产精品视频公开费视频| 波多野结衣视频在线看| 日韩在线卡一卡二| 国产精品久久久久久久久久久久| 日本一区二区三区精品| 美女尤物久久精品| 国产成人精品免费视频| 波多野结衣黄色网址| 日韩高清在线不卡| 国产美女扒开尿口久久久| 一级特黄色大片| 韩国av一区二区三区在线观看| 91久久久精品| 性一交一乱一乱一视频| 丁香五精品蜜臀久久久久99网站 | 97精品国产97久久久久久免费| 国产999精品久久久| 国产一级片久久| 国产精品theporn| 伊人亚洲精品| 欧美一区二区三区在线视频| 精品人妻一区二区三| 成人午夜大片| 国产a视频精品免费观看| 日韩av免费在线观看| 日韩免费av网站| 美国三级日本三级久久99| 成人精品在线视频| 亚洲精品国产片| 99视频国产精品| 日韩精品一区二区三区外面| 日本中文字幕在线视频| 一区二区三区在线视频观看| 欧美一级视频在线播放| 日韩电影免费观看高清完整版| 欧美色窝79yyyycom| 51自拍视频在线观看| 国内精品麻豆美女在线播放视频| 亚洲欧美一区二区三区四区 | 精品视频国内| 欧美精品一区二区精品网| 一道本在线观看| 亚洲九九在线| 日本电影亚洲天堂| 精品人妻一区二区三区含羞草| 99国产一区二区三精品乱码| 天天成人综合网| 性国裸体高清亚洲| 91精品视频网| 色欲狠狠躁天天躁无码中文字幕| 国内在线观看一区二区三区| 国产成人亚洲综合91| 亚洲av无码片一区二区三区| 国产视频一区不卡| www精品久久| 自拍偷拍亚洲| 亚洲无限av看| 精品在线视频观看| 毛片基地黄久久久久久天堂| 精品毛片久久久久久| 菠萝蜜视频国产在线播放| 日本高清不卡一区| 亚洲少妇18p| 在线观看国产精品入口| 国产精品成av人在线视午夜片| 刘玥91精选国产在线观看| 国产精品国产三级国产普通话99| 91视频最新入口| 一区二区日韩| 久久精品国产2020观看福利| 波多野结衣理论片| 久久综合一区二区| 国产96在线 | 亚洲| 视频二区欧美| 久久久精品亚洲| 中文字幕在线观看高清| www国产亚洲精品久久麻豆| 国产欧美精品aaaaaa片| 成人综合日日夜夜| 久久精品夜夜夜夜夜久久| 亚洲 小说区 图片区| 2023国产一二三区日本精品2022| 免费特级黄色片| 6080成人| 精品自拍视频在线观看| 国产又粗又长视频| 久久久亚洲精品一区二区三区| 国产a级片网站| 伊人久久大香线蕉av超碰| 久久成人av网站| 国产日韩免费视频| 亚洲视频免费看| 手机在线国产视频| 99久久婷婷国产综合精品电影√| 国产精品美女久久| 95在线视频| 欧美手机在线视频| 91视频最新网址| 国内精品写真在线观看| 伊人再见免费在线观看高清版| 免费看日产一区二区三区| 久久99久久99精品中文字幕 | 国产乱色国产精品免费视频| 日本三日本三级少妇三级66| 看亚洲a级一级毛片| 欧美大片在线看免费观看| 人妻一区二区三区四区| 五月天激情综合| 在线不卡av电影| 麻豆国产一区二区| 成人免费看片视频在线观看| 日韩精品三级| 97色在线观看| 麻豆导航在线观看| 欧美日韩亚洲综合一区| 国产美女福利视频| 成人av在线资源网| 9久久婷婷国产综合精品性色| 水蜜桃精品av一区二区| 亚洲自拍偷拍在线| 精品极品在线| 在线精品91av| 性一交一乱一透一a级| 精品久久久久久中文字幕| 天堂久久精品忘忧草| 精品亚洲国内自在自线福利| 50度灰在线观看| 日韩av三区| 国产剧情日韩欧美| a√中文在线观看| 国产亚洲精品久久久久久| 国产伦理吴梦梦伦理| 亚洲午夜影视影院在线观看| 非洲一级黄色片| 国产精品1区2区| 青青青在线播放| 亚洲综合色网| 免费国产在线精品一区二区三区| 亚洲久草在线| 欧美一级片在线播放| 黄色网址视频在线观看| 日韩av在线网站| 91久久精品无码一区二区| 婷婷六月综合网| 蜜桃av.com| 国产亚洲一区二区三区四区| 美女日批在线观看| 免费久久99精品国产| 野外做受又硬又粗又大视频√| 日韩理论电影| 久久精品国产理论片免费| 精品国产不卡一区二区| 国产成人精品视频在线| 午夜小视频福利在线观看| 尤物yw午夜国产精品视频明星| 亚洲精品一级片| 欧美日韩一本到| 国产伦精品一区二区三区视频网站| 一区二区在线观看视频在线观看| 摸摸摸bbb毛毛毛片| 不卡一区二区三区四区| 红桃视频一区二区三区免费| 日韩av不卡在线观看| 亚洲 高清 成人 动漫| 欧美精品18| 国产又大又长又粗又黄| 欧美日韩中文一区二区| 精品欧美一区二区在线观看视频 | 亚洲国产美女久久久久| 国产成年妇视频| 欧美日韩一区二区在线观看 | 是的av在线| 久久久久中文字幕| 香蕉成人app免费看片| 久久视频精品在线| 男人天堂久久久| 这里只有精品视频| 成人h小游戏| 日韩精品欧美国产精品忘忧草| 欧美 日韩 人妻 高清 中文| 日韩欧美一级精品久久| 国产精品怡红院| 欧美日韩视频在线一区二区| 波多野结衣电影在线播放| 在线一区二区视频| 无码人妻av免费一区二区三区| 午夜日韩在线观看| 日韩欧美亚洲视频| 欧美日韩一区二区三区在线免费观看 | 风间由美性色一区二区三区 | www.51av欧美视频| 欧美成人午夜视频| 中文在线观看免费| 久久成人亚洲精品| av在线app| 欧美猛少妇色xxxxx| 最新黄网在线观看| 欧美韩国理论所午夜片917电影| 最近中文字幕免费mv2018在线| 美女性感视频久久久| 三级网站视频在在线播放| 欧美大秀在线观看| 高清毛片在线观看| 日本91av在线播放| avav成人| 91免费欧美精品| 日韩中文字幕无砖| 国严精品久久久久久亚洲影视| 欧美天堂社区| 日本10禁啪啪无遮挡免费一区二区| 国产成人1区| 艳色歌舞团一区二区三区| 亚洲精品久久| 九九爱精品视频| 久久午夜精品| 污视频网址在线观看| 国产精品1024| 日韩一级视频在线观看| 国产精品视频一区二区三区不卡| 日本女人性生活视频| 亚洲午夜免费电影| 日韩黄色片网站| 91麻豆精品国产无毒不卡在线观看| 国产福利资源在线| 精品小视频在线| 麻豆影视国产在线观看| 国内精品久久久久久久| 欧美日韩美女| 91网站在线免费观看| 久久久久久毛片免费看 | 欧美性大战xxxxx久久久| 国产手机视频在线| 亚洲精品美女在线| 老司机99精品99| 国产综合在线看| 91国内外精品自在线播放| aaa级精品久久久国产片| 杨幂一区二区三区免费看视频| 亚洲制服中文| 国产欧美日韩综合一区在线播放| 一区二区免费av| aaa国产一区| 亚洲天堂黄色片| 91九色02白丝porn| 国产综合视频在线| 色偷偷偷亚洲综合网另类| а√天堂中文在线资源8| 国产免费一区视频观看免费 | 国产精品入口芒果| 麻豆精品视频在线观看免费| 99久久免费看精品国产一区| 日韩一区欧美小说| 无码人妻丰满熟妇精品区| 欧美videos大乳护士334| 香蕉视频在线看| 欧日韩在线观看| 中文一区二区三区四区| 中文字幕成人一区| 日本视频中文字幕一区二区三区| 亚洲欧美日韩偷拍| 亚洲六月丁香色婷婷综合久久 | 日韩精品亚洲视频| 日韩特级毛片| 国产欧美一区二区三区视频| 免费视频亚洲| 久久黄色片视频| 成人午夜伦理影院| 全程偷拍露脸中年夫妇| 欧美日韩国产一区| av资源种子在线观看| …久久精品99久久香蕉国产| 风间由美性色一区二区三区四区| 熟妇熟女乱妇乱女网站| 蜜臀精品一区二区三区在线观看| 日韩一区二区a片免费观看| 欧美日韩精品中文字幕| 黄色av网站免费在线观看| 久久999免费视频| 国产精品99久久免费| 中文字幕中文字幕99| 久久精品国产精品亚洲精品| 欧美亚洲色综久久精品国产| 色欧美日韩亚洲| 男女网站在线观看| 青青久久aⅴ北条麻妃| 亚洲国产网址| 日本成人黄色网| 国产欧美一区二区精品仙草咪| 午夜久久久久久久久久影院| 亚洲乱码国产乱码精品精天堂| 女人让男人操自己视频在线观看| 精品毛片久久久久久| 亚洲综合精品四区| 91成年人网站| 欧美午夜精品一区二区三区| yiren22综合网成人| 国产精品一区二区三区免费视频| 国内精品视频在线观看| 少妇黄色一级片| 亚洲特级片在线| www.天堂在线| 午夜伦理精品一区| 国产调教一区二区三区| 手机看片福利日韩| 日韩理论片中文av| 亚洲精品国产片| 欧美在线免费观看| 久久麻豆精品| 国产成人av片| 欧美日韩国产精品一区二区三区四区 | 国产肉体ⅹxxx137大胆| 成人免费高清视频| 成年人视频免费| 日韩一级黄色av| 亚洲精品a区| 国产成人无码精品久久久性色| 国产欧美日韩综合| 国产免费av电影| 午夜精品一区二区三区在线视频| 国产精品一区2区3区| 在线观看日本一区二区| 亚洲曰韩产成在线| 可以免费看污视频的网站在线| 国产精品永久免费| 亚洲视频碰碰| 久久午夜福利电影| 欧美一级淫片007| 一区二区三区电影大全| 一区二区三区av在线| 成人午夜视频网站| 国产亚洲久一区二区| 欧美精品久久一区二区| 国产一区二区三区不卡视频网站| 国产美女18xxxx免费视频| 亚洲高清在线精品| 91露出在线| 国产亚洲精品久久飘花| 免费人成在线不卡| 中文字幕在线字幕中文| 日韩小视频网址| 香蕉久久99| 午夜激情视频网| 色婷婷国产精品综合在线观看| 呦呦在线视频| 亚欧精品在线| 91色.com| 亚洲AV无码精品国产| 国产日韩欧美另类| 免费亚洲一区| 久久久精品一区二区涩爱|