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

文件寫入的6種方法,你覺得哪種性能最好?

開發 后端
在 Java 中操作文件的方法本質上只有兩種:字符流和字節流,而字節流和字符流的實現類又有很多,因此在文件寫入時我們就可以選擇各種各樣的類來實現。我們本文就來盤點一下這些方法,順便測試一下它們性能,以便為我們選出最優的寫入方法。

[[359184]]

在 Java 中操作文件的方法本質上只有兩種:字符流和字節流,而字節流和字符流的實現類又有很多,因此在文件寫入時我們就可以選擇各種各樣的類來實現。我們本文就來盤點一下這些方法,順便測試一下它們性能,以便為我們選出最優的寫入方法。

在正式開始之前,我們先來了解幾個基本的概念:流、字節流和字符流的定義與區別。

0.什么是流?

Java 中的“流”是一種抽象的概念,也是一種比喻,就好比水流一樣,水流是從一端流向另一端的,而在 Java 中的“水流”就是數據,數據會從一端“流向”另一端。

根據流的方向性,我們可以將流分為輸入流和輸出流,當程序需要從數據源中讀入數據的時候就會開啟一個輸入流,相反,寫出數據到某個數據源目的地的時候也會開啟一個輸出流,數據源可以是文件、內存或者網絡等。

1.什么是字節流?

字節流的基本單位為字節(Byte),一個字節通常為 8 位,它是用來處理二進制(數據)的。字節流有兩個基類:InputStream(輸入字節流)和 OutputStream(輸出字節流)。

常用字節流的繼承關系圖如下圖所示:


其中 InputStream 用于讀操作,而 OutputStream 用于寫操作。

2.什么是字符流?

字符流的基本單位為 Unicode,大小為兩個字節(Byte),它通常用來處理文本數據。字符流的兩個基類:Reader(輸入字符流)和 Writer(輸出字符流)。

常用字符流的繼承關系圖如下圖所示:


3.流的分類

流可以根據不同的維度進行分類,比如可以根據流的方向進行分類,也可以根據傳輸的單位進行分類,還可以根據流的功能進行分類,比如以下幾個。

① 按流向分類

  • 輸出流:OutputStream 和 Writer 為基類。
  • 輸入流:InputStream 和 Reader 為基類。

② 根據傳輸數據單位分類

  • 字節流:OutputStream 和 InputStream 為基類。
  • 字符流:Writer 和 Reader 為基類。

③ 根據功能分類

  • 字節流:可以從或向一個特定的地方(節點)讀寫數據。
  • 處理流:是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。

PS:我們通常是以傳輸數據的單位來為流進行分類。

4.寫文件的6種方法

寫入文件的方法主要源于字符流 Writer 和輸出字節流 OutputStream 的子類,如下圖所示:


以上標注✅號的類就是用來實現文件寫入的類,除此之外,在 JDK 1.7 中還提供了 Files 類用來實現對文件的各種操作,接下來我們分別來看。

方法 1:FileWriter

FileWriter 屬于「字符流」體系中的一員,也是文件寫入的基礎類,它包含 5 個構造函數,可以傳遞一個具體的文件位置,或者 File 對象,第二參數表示是否要追加文件,默認值為 false 表示重寫文件內容,而非追加文件內容(關于如何追加文件,我們后面會講)。


FileWriter 類的實現如下:

  1. /** 
  2.   * 方法 1:使用 FileWriter 寫文件 
  3.   * @param filepath 文件目錄 
  4.   * @param content  待寫入內容 
  5.   * @throws IOException 
  6.   */ 
  7. public static void fileWriterMethod(String filepath, String content) throws IOException { 
  8.     try (FileWriter fileWriter = new FileWriter(filepath)) { 
  9.         fileWriter.append(content); 
  10.     } 

只需要傳入具體的文件路徑和待寫入的內容即可,調用代碼如下:

  1. public static void main(String[] args) { 
  2.     fileWriterMethod("/Users/mac/Downloads/io_test/write1.txt""哈嘍,Java中文社群."); 

然后我們打開寫入的文件,實現結果如下:


  • 關于資源釋放的問題:在 JDK 7 以上的版本,我們只需要使用 try-with-resource 的方式就可以實現資源的釋放,就比如使用 try (FileWriter fileWriter = new FileWriter(filepath)) {...} 就可以實現 FileWriter 資源的自動釋放。

方法 2:BufferedWriter

BufferedWriter 也屬于字符流體系的一員,與 FileWriter 不同的是 BufferedWriter自帶緩沖區,因此它寫入文件的性能更高(下文會對二者進行測試)。

小知識點:緩沖區

緩沖區又稱為緩存,它是內存空間的一部分。也就是說,在內存空間中預留了一定的存儲空間,這些存儲空間用來緩沖輸入或輸出的數據,這部分預留的空間就叫做緩沖區。

緩沖區的優勢

以文件流的寫入為例,如果我們不使用緩沖區,那么每次寫操作 CPU 都會和低速存儲設備也就是磁盤進行交互,那么整個寫入文件的速度就會受制于低速的存儲設備(磁盤)。但如果使用緩沖區的話,每次寫操作會先將數據保存在高速緩沖區內存上,當緩沖區的數據到達某個閾值之后,再將文件一次性寫入到磁盤上。因為內存的寫入速度遠遠大于磁盤的寫入速度,所以當有了緩沖區之后,文件的寫入速度就被大大提升了。

了解了緩存區的優點之后,咱們回到本文的主題,接下來我們用 BufferedWriter 來文件的寫入,實現代碼如下:

  1. /** 
  2.  * 方法 2:使用 BufferedWriter 寫文件 
  3.  * @param filepath 文件目錄 
  4.  * @param content  待寫入內容 
  5.  * @throws IOException 
  6.  */ 
  7. public static void bufferedWriterMethod(String filepath, String content) throws IOException { 
  8.     try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filepath))) { 
  9.         bufferedWriter.write(content); 
  10.     } 

調用代碼和方法 1 類似,這里就不再贅述了。

方法 3:PrintWriter

PrintWriter 也屬于字符流體系中的一員,它雖然叫“字符打印流”,但使用它也可以實現文件的寫入,實現代碼如下:

  1. /** 
  2.  * 方法 3:使用 PrintWriter 寫文件 
  3.  * @param filepath 文件目錄 
  4.  * @param content  待寫入內容 
  5.  * @throws IOException 
  6.  */ 
  7. public static void printWriterMethod(String filepath, String content) throws IOException { 
  8.     try (PrintWriter printWriter = new PrintWriter(new FileWriter(filepath))) { 
  9.         printWriter.print(content); 
  10.     } 

從上述代碼可以看出,無論是 PrintWriter 還是 BufferedWriter 都必須基于 FileWriter 類來完成調用。

方法 4:FileOutputStream

上面 3 個示例是關于字符流寫入文件的一些操作,而接下來我們將使用字節流來完成文件寫入。我們將使用 String 自帶的 getBytes() 方法先將字符串轉換成二進制文件,然后再進行文件寫入,它的實現代碼如下:

  1. /** 
  2.  * 方法 4:使用 FileOutputStream 寫文件 
  3.  * @param filepath 文件目錄 
  4.  * @param content  待寫入內容 
  5.  * @throws IOException 
  6.  */ 
  7. public static void fileOutputStreamMethod(String filepath, String content) throws IOException { 
  8.     try (FileOutputStream fileOutputStream = new FileOutputStream(filepath)) { 
  9.         byte[] bytes = content.getBytes(); 
  10.         fileOutputStream.write(bytes); 
  11.     } 

方法 5:BufferedOutputStream

BufferedOutputStream 屬于字節流體系中的一員,與 FileOutputStream 不同的是,它自帶了緩沖區的功能,因此性能更好,它的實現代碼如下:

  1. /** 
  2.  * 方法 5:使用 BufferedOutputStream 寫文件 
  3.  * @param filepath 文件目錄 
  4.  * @param content  待寫入內容 
  5.  * @throws IOException 
  6.  */ 
  7. public static void bufferedOutputStreamMethod(String filepath, String content) throws IOException { 
  8.     try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( 
  9.             new FileOutputStream(filepath))) { 
  10.         bufferedOutputStream.write(content.getBytes()); 
  11.     } 

方法 6:Files

接下來的操作方法和之前的代碼都不同,接下來咱們就使用 JDK 7 中提供的一個新的文件操作類 Files 來實現文件的寫入。

Files 類是 JDK 7 添加的新的操作文件的類,它提供了提供了大量處理文件的方法,例如文件復制、讀取、寫入,獲取文件屬性、快捷遍歷文件目錄等,這些方法極大的方便了文件的操作,它的實現代碼如下:

  1. /** 
  2.  * 方法 6:使用 Files 寫文件 
  3.  * @param filepath 文件目錄 
  4.  * @param content  待寫入內容 
  5.  * @throws IOException 
  6.  */ 
  7. public static void filesTest(String filepath, String content) throws IOException { 
  8.     Files.write(Paths.get(filepath), content.getBytes()); 

以上這些方法都可以實現文件的寫入,那哪一種方法性能更高呢?接下來我們來測試一下。

5.性能測試

我們先來構建一個比較大的字符串,然后分別用以上 6 種方法來測試文件寫入的速度,最后再把結果打印出來,測試代碼如下:

  1. import java.io.*; 
  2. import java.nio.file.Files; 
  3. import java.nio.file.Paths; 
  4.  
  5. public class WriteExample { 
  6.     public static void main(String[] args) throws IOException { 
  7.         // 構建寫入內容 
  8.         StringBuilder stringBuilder = new StringBuilder(); 
  9.         for (int i = 0; i < 1000000; i++) { 
  10.             stringBuilder.append("ABCDEFGHIGKLMNOPQRSEUVWXYZ"); 
  11.         } 
  12.         // 寫入內容 
  13.         final String content = stringBuilder.toString(); 
  14.         // 存放文件的目錄 
  15.         final String filepath1 = "/Users/mac/Downloads/io_test/write1.txt"
  16.         final String filepath2 = "/Users/mac/Downloads/io_test/write2.txt"
  17.         final String filepath3 = "/Users/mac/Downloads/io_test/write3.txt"
  18.         final String filepath4 = "/Users/mac/Downloads/io_test/write4.txt"
  19.         final String filepath5 = "/Users/mac/Downloads/io_test/write5.txt"
  20.         final String filepath6 = "/Users/mac/Downloads/io_test/write6.txt"
  21.  
  22.         // 方法一:使用 FileWriter 寫文件 
  23.         long stime1 = System.currentTimeMillis(); 
  24.         fileWriterTest(filepath1, content); 
  25.         long etime1 = System.currentTimeMillis(); 
  26.         System.out.println("FileWriter 寫入用時:" + (etime1 - stime1)); 
  27.  
  28.         // 方法二:使用 BufferedWriter 寫文件 
  29.         long stime2 = System.currentTimeMillis(); 
  30.         bufferedWriterTest(filepath2, content); 
  31.         long etime2 = System.currentTimeMillis(); 
  32.         System.out.println("BufferedWriter 寫入用時:" + (etime2 - stime2)); 
  33.  
  34.         // 方法三:使用 PrintWriter 寫文件 
  35.         long stime3 = System.currentTimeMillis(); 
  36.         printWriterTest(filepath3, content); 
  37.         long etime3 = System.currentTimeMillis(); 
  38.         System.out.println("PrintWriterTest 寫入用時:" + (etime3 - stime3)); 
  39.  
  40.         // 方法四:使用 FileOutputStream  寫文件 
  41.         long stime4 = System.currentTimeMillis(); 
  42.         fileOutputStreamTest(filepath4, content); 
  43.         long etime4 = System.currentTimeMillis(); 
  44.         System.out.println("FileOutputStream 寫入用時:" + (etime4 - stime4)); 
  45.  
  46.         // 方法五:使用 BufferedOutputStream 寫文件 
  47.         long stime5 = System.currentTimeMillis(); 
  48.         bufferedOutputStreamTest(filepath5, content); 
  49.         long etime5 = System.currentTimeMillis(); 
  50.         System.out.println("BufferedOutputStream 寫入用時:" + (etime5 - stime5)); 
  51.  
  52.         // 方法六:使用 Files 寫文件 
  53.         long stime6 = System.currentTimeMillis(); 
  54.         filesTest(filepath6, content); 
  55.         long etime6 = System.currentTimeMillis(); 
  56.         System.out.println("Files 寫入用時:" + (etime6 - stime6)); 
  57.  
  58.     } 
  59.  
  60.     /** 
  61.      * 方法六:使用 Files 寫文件 
  62.      * @param filepath 文件目錄 
  63.      * @param content  待寫入內容 
  64.      * @throws IOException 
  65.      */ 
  66.     private static void filesTest(String filepath, String content) throws IOException { 
  67.         Files.write(Paths.get(filepath), content.getBytes()); 
  68.     } 
  69.  
  70.     /** 
  71.      * 方法五:使用 BufferedOutputStream 寫文件 
  72.      * @param filepath 文件目錄 
  73.      * @param content  待寫入內容 
  74.      * @throws IOException 
  75.      */ 
  76.     private static void bufferedOutputStreamTest(String filepath, String content) throws IOException { 
  77.         try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( 
  78.                 new FileOutputStream(filepath))) { 
  79.             bufferedOutputStream.write(content.getBytes()); 
  80.         } 
  81.     } 
  82.  
  83.     /** 
  84.      * 方法四:使用 FileOutputStream  寫文件 
  85.      * @param filepath 文件目錄 
  86.      * @param content  待寫入內容 
  87.      * @throws IOException 
  88.      */ 
  89.     private static void fileOutputStreamTest(String filepath, String content) throws IOException { 
  90.         try (FileOutputStream fileOutputStream = new FileOutputStream(filepath)) { 
  91.             byte[] bytes = content.getBytes(); 
  92.             fileOutputStream.write(bytes); 
  93.         } 
  94.     } 
  95.  
  96.     /** 
  97.      * 方法三:使用 PrintWriter 寫文件 
  98.      * @param filepath 文件目錄 
  99.      * @param content  待寫入內容 
  100.      * @throws IOException 
  101.      */ 
  102.     private static void printWriterTest(String filepath, String content) throws IOException { 
  103.         try (PrintWriter printWriter = new PrintWriter(new FileWriter(filepath))) { 
  104.             printWriter.print(content); 
  105.         } 
  106.     } 
  107.  
  108.     /** 
  109.      * 方法二:使用 BufferedWriter 寫文件 
  110.      * @param filepath 文件目錄 
  111.      * @param content  待寫入內容 
  112.      * @throws IOException 
  113.      */ 
  114.     private static void bufferedWriterTest(String filepath, String content) throws IOException { 
  115.         try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filepath))) { 
  116.             bufferedWriter.write(content); 
  117.         } 
  118.     } 
  119.  
  120.     /** 
  121.      * 方法一:使用 FileWriter 寫文件 
  122.      * @param filepath 文件目錄 
  123.      * @param content  待寫入內容 
  124.      * @throws IOException 
  125.      */ 
  126.     private static void fileWriterTest(String filepath, String content) throws IOException { 
  127.         try (FileWriter fileWriter = new FileWriter(filepath)) { 
  128.             fileWriter.append(content); 
  129.         } 
  130.     } 

在查看結果之前,我們先去對應的文件夾看看寫入的文件是否正常,如下圖所示:


從上述結果可以看出,每種方法都正常寫入了 26 MB 的數據,它們最終執行的結果如下圖所示:


從以上結果可以看出,字符流的操作速度最快,這是因為我們本次測試的代碼操作的是字符串,所以在使用字節流時,需要先將字符串轉換為字節流,因此在執行效率上不占優勢。

從上述結果可以看出,性能最好的是帶有緩沖區的字符串寫入流 BufferedWriter,性能最慢的是 Files。

PS:以上的測試結果只是針對字符串的操作場景有效,如果操作的是二進制的文件,那么就應該使用帶緩沖區的字節流 BufferedOutputStream。

6.擴展知識:內容追加

以上代碼會對文件進行重寫,如果只想在原有的基礎上追加內容,就需要在創建寫入流的時候多設置一個 append 的參數為 true,比如如果我們使用 FileWriter 來實現文件的追加的話,實現代碼是這樣的:

  1. public static void fileWriterMethod(String filepath, String content) throws IOException { 
  2.     // 第二個 append 的參數傳遞一個 true = 追加文件的意思 
  3.     try (FileWriter fileWriter = new FileWriter(filepath, true)) { 
  4.         fileWriter.append(content); 
  5.     } 

如果使用的是 BufferedWriter 或 PrintWriter,也是需要在構建 new FileWriter 類時多設置一個 append 的參數為 true,實現代碼如下:

  1. try (BufferedWriter bufferedWriter = new BufferedWriter( 
  2.     new FileWriter(filepath, true))) { 
  3.     bufferedWriter.write(content); 

相比來說 Files 類要想實現文件的追加寫法更加特殊一些,它需要在調用 write 方法時多傳一個 StandardOpenOption.APPEND 的參數,它的實現代碼如下:

  1. Files.write(Paths.get(filepath), content.getBytes(), StandardOpenOption.APPEND); 

7.總結

本文我們展示了 6 種寫入文件的方法,這 6 種方法總共分為 3 類:字符流寫入、字節流寫入和 Files 類寫入。其中操作最便利的是 Files 類,但它的性能不怎么好。如果對性能有要求就推薦使用帶有緩存區的流來完成操作,如 BufferedWriter 或 BufferedOutputStream。如果寫入的內容是字符串的話,那么推薦使用 BufferedWriter,如果寫入的內容是二進制文件的話就推薦使用 BufferedOutputStream。

參考 & 鳴謝

https://www.cnblogs.com/absfree/p/5415092.html

 

責任編輯:姜華 來源: Java中文社群
相關推薦

2024-01-31 09:24:58

2023-10-30 09:46:08

接口重試技巧

2025-02-04 09:35:11

PHP開發者JSON

2010-08-26 09:16:42

Web服務器

2010-04-30 10:40:19

Oracle實現

2023-09-07 15:11:44

2020-06-23 09:52:31

運營效率首席信息官IT預算

2020-05-15 10:09:17

優化創新數字化轉型CIO

2024-07-30 10:45:05

容器化編排工具

2024-12-23 08:10:00

Python代碼性能代碼

2015-03-13 13:50:47

Java讀取文件夾大小Java讀取文件Java讀取

2010-07-21 16:01:33

升職

2009-04-01 11:17:52

內存分配調優Oracle

2013-10-21 14:26:04

2014-11-04 09:57:30

Windows

2009-04-07 10:52:00

職場工作方法

2019-08-22 09:57:10

ExpdpImpdpMOS

2017-11-03 10:40:25

Python復制文件方法

2022-11-10 14:33:40

Kubernetes容器

2018-01-04 09:46:48

PHPHTTP
點贊
收藏

51CTO技術棧公眾號

亚洲狼人综合网| 在线观看日本www| 免费看黄网站在线观看| 欧美激情1区2区3区| 亚洲成人a**址| 日本视频一区二区在线观看| 日韩精品久久久久久久酒店| 日韩成人18| 夜夜嗨av一区二区三区| 99超碰麻豆| 国产做受高潮漫动| 国产日韩在线观看视频| 亚洲精品国产无天堂网2021 | 亚洲韩国一区二区三区| 成人午夜在线影院| 国产成年人免费视频| 欧亚精品一区| 欧美三级午夜理伦三级中视频| 中文字幕久久一区| 亚洲免费一级片| 国产一区二区中文| 亚洲欧美日韩区| 三上悠亚av一区二区三区| 麻豆网站在线免费观看| 91在线精品一区二区| 国产精品激情自拍| 日韩在线中文字幕视频| 欧美成年网站| 动漫精品一区二区| 久久久久久久免费| 国产情侣av在线| 一本久久知道综合久久| 中文国产成人精品| 国产乱国产乱老熟300部视频| 亚洲欧美se| 亚洲天堂2016| 99在线观看| 亚洲大尺度在线观看| 欧美午夜不卡| 中文字幕亚洲无线码在线一区| av漫画在线观看| jvid一区二区三区| 精品国产户外野外| 自拍偷拍视频在线| 黄色片免费在线| 成人国产精品视频| 国产人妻互换一区二区| 超碰在线观看91| 一区二区三区在线| 亚洲欧美日韩精品久久奇米色影视| 成人不卡免费视频| 热三久草你在线| 亚洲免费高清视频在线| 欧美婷婷久久| 亚洲精华国产精华精华液网站| 蜜臀av一区二区在线免费观看 | 国产黄色一级大片| 久久永久免费| 性色av一区二区三区在线观看| 麻豆一区在线观看| 国内成人自拍| 亚洲精品久久久久| 高清中文字幕mv的电影| 成人国产精品一区二区网站| 欧美三级视频在线观看| 免费在线观看日韩视频| www久久日com| 国产精品国产三级国产普通话蜜臀 | 精品无码一区二区三区的天堂| 先锋在线资源一区二区三区| 无码国精品一区二区免费蜜桃| 粉嫩av一区二区三区粉嫩| 91免费版网站入口| 一本色道久久综合精品婷婷| 美腿丝袜亚洲一区| 国产精品久久久久免费a∨| 久久精品视频1| 在线精品亚洲| 久久久久久久久国产| 波多野结衣久久久久| 欧美国产美女| 久久亚洲精品一区| 亚洲二区在线播放| 91综合视频| 久久久成人精品视频| 极品美妇后花庭翘臀娇吟小说| 国产精品久久久久久| 精品国产一区二区在线| 国产探花在线免费观看| 欧美精品二区| 国内精品伊人久久| 日韩黄色在线播放| 久久精品30| 国产精品极品美女在线观看免费 | 天天干天天草天天射| 99久久婷婷国产综合精品| 精品国产一区二区三区四区vr| 亚洲三级黄色片| 久久综合久久99| 日韩欧美精品一区二区三区经典 | 黄色污污视频在线观看| 亚洲成人精品影院| 成人午夜视频免费在线观看| 成人精品动漫| 日韩视频免费直播| 黄色污在线观看| 国产精品嫩模av在线| 在线视频日韩精品| 国产美女久久久久久| 欧美日韩ab| 91高清视频在线免费观看| 天堂在线免费观看视频| 精品亚洲porn| 国产经典一区二区三区| 瑟瑟在线观看| 亚洲品质自拍视频网站| 青青青在线播放| 福利欧美精品在线| 久久精品成人一区二区三区| 在线天堂中文字幕| 国产aⅴ综合色| 夜夜爽99久久国产综合精品女不卡| 操喷在线视频| 制服.丝袜.亚洲.中文.综合| 受虐m奴xxx在线观看| 狠狠色综合网| 91啪国产在线| 91精品国产91久久久久游泳池| 精品久久久久久久久中文字幕| 色噜噜狠狠一区二区三区狼国成人| 九九免费精品视频在线观看| 欧美激情影音先锋| 99久久国产免费| 中日韩免费视频中文字幕| 777久久久精品一区二区三区| 亚洲不卡视频| 操91在线视频| 97在线公开视频| 中日韩免费视频中文字幕| 亚洲国产精品毛片av不卡在线| 日韩精品免费一区二区夜夜嗨| 欧美精品久久久久a| 性一交一乱一伧老太| 亚洲精品亚洲人成人网| www.久久com| 91精品亚洲| 国产在线一区二区三区| 川上优的av在线一区二区| 色哟哟日韩精品| 国产精品毛片一区二区| 国产精品久久777777毛茸茸 | 免费精品99久久国产综合精品应用| 国产精品一区2区3区| 日本成人免费在线| 飘雪影院手机免费高清版在线观看| 婷婷综合另类小说色区| 国产一级二级在线观看| 国产精品亚洲综合色区韩国| 乱一区二区三区在线播放| 擼擼色在线看观看免费| 日韩av一区二区在线观看| 黄色片视频网站| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩在线中文| 国内精品久久久久久99蜜桃| 国产精品久久久久久亚洲影视| 一级毛片视频在线| 91精品国产综合久久久蜜臀粉嫩 | 牛牛国产精品| 岛国视频一区免费观看| 成人影院在线视频| 亚洲精品小视频| 中文字幕一区2区3区| 自拍偷自拍亚洲精品播放| 欧美xxxx日本和非洲| 国产农村妇女精品一区二区| 人禽交欧美网站免费| 成人黄色在线| 欧美劲爆第一页| 青青草在线播放| 欧美精品精品一区| 久久精品美女视频| 国产午夜精品在线观看| 成人黄色一级大片| 亚洲精品乱码| 亚洲视频小说| 9l视频自拍蝌蚪9l视频成人| 日韩**中文字幕毛片| 欧美成人三区| 亚洲国产精品专区久久| 中文字幕av网站| 一区二区免费看| 中文字幕免费高清| 国产精品77777| 久久精品99国产| 亚洲综合中文| 欧美激情www| 国内精品视频| 奇米影视亚洲狠狠色| 午夜在线视频| 日韩av中文字幕在线| 亚洲一区中文字幕在线| 午夜久久久久久电影| 国产农村妇女精品一区| av午夜一区麻豆| 九九热精品国产| 久久精品日韩欧美| 国产精品视频网站在线观看| 欧美理论视频| 国产亚洲第一区| 亚洲欧洲专区| 国产91在线播放| 黄色小说在线播放| www.日韩视频| 国产一级在线观看| 亚洲精美色品网站| 国产夫妻在线观看| 欧美三级视频在线| 老熟妇仑乱一区二区av| 亚洲国产视频一区| 伊人在线视频观看| 国产网站一区二区| 亚洲一区二区三区无码久久| 国产一级精品在线| 依人在线免费视频| 丝袜亚洲另类欧美综合| 国产精品亚洲综合在线观看| 国产日韩欧美麻豆| av天堂一区二区| 日本不卡一区二区三区高清视频| 岛国大片在线播放| 亚洲精品国产成人影院| 神马一区二区影院| 偷拍自拍一区| 国产乱码精品一区二区三区卡| 在线观看欧美| 国产精品女人久久久久久| 亚洲黄色免费av| 久久久久久亚洲精品不卡| 成人无遮挡免费网站视频在线观看 | 国产精品无码免费专区午夜| 日韩极品一区| 日本一区二区三区视频在线观看| 日韩欧美黄色| 久久久久久九九九九| 欧美男人操女人视频| 国产精品乱码视频| xxxx日韩| 国产女主播一区二区| 国产精品对白| 精品国产一区二区三| 男人的天堂久久| 精品欧美一区二区三区久久久 | 欧美成人黄色网| 亚洲激情成人在线| 麻豆国产尤物av尤物在线观看| 伊人婷婷欧美激情| 国产精品第二十页| 欧美日韩黄色大片| 日本中文字幕久久| 欧洲人成人精品| 在线免费观看视频网站| 欧美日韩精品一区二区三区四区| 一二三四区在线| 日韩一区二区三区视频在线观看| 性做久久久久久久久久| 亚洲国产日韩欧美在线图片| 日韩一区二区三区中文字幕| 亚洲人成网站免费播放| av网站无病毒在线| 久久影视免费观看| 免费网站在线观看人| 992tv在线成人免费观看| 美女网站视频一区| 成人精品视频99在线观看免费 | 久久久久久久麻豆| 亚洲一区二区三区影院| 欧美激情黑白配| 欧美日韩国产经典色站一区二区三区 | 欧美日韩在线直播| 国产色视频在线| 亚洲精品wwww| 在线看的av网站| 欧美国产视频一区二区| 最近在线中文字幕| 91九色国产社区在线观看| h视频久久久| 日韩欧美亚洲v片| 国产精品观看| 91视频免费版污| 成人综合婷婷国产精品久久免费| 色欲av无码一区二区三区| 中文字幕一区av| 久久狠狠高潮亚洲精品| 欧美视频一区二区三区在线观看 | 美女黄色片网站| 亚洲免费综合| 夜夜爽久久精品91| 91色视频在线| 国产三级国产精品国产国在线观看| 欧美丝袜一区二区| 国产三级精品在线观看| 亚洲欧洲一区二区三区在线观看| 中文字幕在线观看播放| 国产成人一区二区三区电影| 超碰成人免费| 国产日韩视频在线播放| 久久一区欧美| 亚洲AV无码久久精品国产一区| 国产无一区二区| 国产午夜视频在线| 欧美剧情电影在线观看完整版免费励志电影 | 蜜桃麻豆www久久国产精品| 亚洲理论电影网| 中文字幕第80页| 成人精品在线视频观看| 任我爽在线视频| 在线观看国产日韩| 五月激情六月婷婷| 欧美多人爱爱视频网站| 欧美极品在线| 亚洲国产精品123| 午夜影院日韩| 午夜久久久久久久| 亚洲综合自拍偷拍| 国产精品视频久久久久久| 亚洲天堂影视av| 亚洲欧美小说色综合小说一区| 国产精品久久亚洲| 欧美在线亚洲综合一区| 一级做a免费视频| 亚洲国产高清不卡| 无码人妻丰满熟妇奶水区码| 日韩av在线免费观看一区| av毛片午夜不卡高**水| 国产99在线免费| 欧美日本一区二区高清播放视频| 激情图片中文字幕| 国产精品的网站| 91亚洲精品国偷拍自产在线观看 | 蜜桃av噜噜一区二区三| 99精品视频免费| 色婷婷免费视频| 五月天亚洲精品| 日本xxxxxwwwww| 国语自产精品视频在线看一大j8| 97青娱国产盛宴精品视频| 国产高清不卡无码视频| 国产精品99久久久久久久vr| 农村妇女精品一区二区| 日韩一区二区三区视频在线观看| 51xtv成人影院| 成人综合av网| 国产日韩欧美高清免费| 偷拍夫妻性生活| 欧美性色欧美a在线播放| 成人在线免费视频| 国产在线视频一区| 欧美不卡一区| 99久久免费看精品国产一区 | 久久久精品一区二区| 久久伊人影院| 欧美大黑帍在线播放| av中文一区二区三区| 亚洲第一网站在线观看| 在线观看中文字幕亚洲| 亚洲午夜剧场| 无码人妻精品一区二区蜜桃百度| 成人综合婷婷国产精品久久| 中文字字幕在线中文| 视频在线观看一区二区| 色悠久久久久综合先锋影音下载| aa视频在线播放| 久久久91精品国产一区二区三区| 日本中文字幕在线观看视频| x99av成人免费| 极品束缚调教一区二区网站| 日本在线视频www| 亚洲欧洲av在线| 黄色一级a毛片| 国产精品免费看久久久香蕉| 中文一区一区三区免费在线观看| 日本一级大毛片a一| 一本色道a无线码一区v| 日本在线看片免费人成视1000| αv一区二区三区| 久久精品人人| 天天天天天天天天操| 日韩福利在线播放| 日本午夜精品久久久久| www.av毛片| 国产精品久久久久精k8| 午夜性色福利影院| 国产在线一区二区三区| 亚洲尤物在线| 久草视频手机在线| 国产网站欧美日韩免费精品在线观看 | 日本69式三人交| 欧美日韩一区二区在线观看视频 | 国产精品久久久久久久天堂 |