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

IO流為什么必須手動關閉,不能像其他的對象坐等GC回收?

開發(fā) 前端
熟悉編程語言的同學,可能知道,無論是 C 語言還是 C++,都需要手動釋放內存,但是 Java 不需要。

一、問題回溯

在項目的開發(fā)過程中,當我們對文件進行讀寫操作時,不知道大家有沒有碰到這樣的問題。

有的同學在做一個讀取臨時文件數(shù)據(jù)的工作,當讀完文件內容,準備將其刪除的時候,有時候會正常,但有時候會提示:操作無法完成,因為文件已在 Java? Platform SE binary 中打開,編譯器也會提示:Resource leak: 'xxxx' is never closed。

樣例代碼如下:

File file = new File("xxx.txt");
// 實例化輸入流
FileReader reader = new FileReader(file);
// 緩沖區(qū)
char[] buffer = new char[1024];

// 分次讀取數(shù)據(jù),每次最多讀取1024個字符,將數(shù)據(jù)讀取到緩沖區(qū)之中,同時返回讀取的字節(jié)個數(shù)
int len;
while ((len = reader.read(buffer)) > -1) {
    // 字符轉為字符串
    String msg = new String(buffer, 0, len);
    System.out.println(msg);
}

// 刪除文件
file.delete();

經過排查,發(fā)現(xiàn)出現(xiàn)該問題的原因是:讀取文件的 IO 流沒有正常的關閉,導致文件一直被流持有,刪除文件不成功!

那這么解決這個問題呢?答案其實也很簡單,當讀完 IO 流的數(shù)據(jù)或者寫完數(shù)據(jù),手動調用一下關閉流的方法,最后再進行刪除文件。

// 刪除文件之前,先將 IO 流關閉
reader.close();

// 刪除文件
file.delete();

可能有的同學會發(fā)出疑問,為什么 IO 流必須手動關閉,不能像其他的方法一樣坐等 GC 回收?

今天我們就一起來聊聊這個話題,以及如何正確的關閉 IO 流操作。

二、為什么 IO 流需要手動關閉?

熟悉編程語言的同學,可能知道,無論是 C 語言還是 C++,都需要手動釋放內存,但是 Java 不需要。

這主要得益于 Java 的虛擬機垃圾回收機制,它可以幫助開發(fā)者自動回收內存中的對象,不需要手動釋放內存,但是有些東西它是無法回收的,例如端口、顯存、文件等,超出了虛擬機能夠釋放資源的界限。

如果對未關閉流的文件進行讀寫操作,可能就會報錯,告訴你這個文件被某個進程占用。如果不手動釋放資源,隨著資源占有量逐漸增多,垃圾會越來越多,最終可能導致系統(tǒng)無法存儲其他的資源,甚至會出現(xiàn)系統(tǒng)崩潰。

一般來說,只要存在 IO 流讀寫操作,無論使用到的是網(wǎng)絡 IO 或者文件 IO,都是需要和計算機內的資源打交道的,清理計算機上面的垃圾,Java 的虛擬機垃圾回收機制沒有這個能力。

熟悉 Java 虛擬機垃圾回收機制的同學,可能知道 gc 有兩個顯著的特點:

  • gc 只能釋放內存資源,而不能釋放與內存無關的資源
  • gc 回收具有不確定性,也就是說你根本不知道它什么時候會回收

所以進行流的操作時,凡是跨出虛擬機邊界的資源都要求程序員自己手動關閉資源。

可能有的同學又發(fā)出疑問,我平時本地測試的時候沒有發(fā)現(xiàn)這個問題,為什么部署到線上就出這個提示的呢?

以讀取文件的FileInputStream流為例,其實里面隱含了一個finalize方法,當虛擬機進行垃圾回收之前,會調用這個方法。

打開源碼,你會發(fā)現(xiàn)底層調用的其實是close釋放資源的方法,可以看到 JDK 間接的幫助開發(fā)者進行最后一次的兜底。

/**
 * Ensures that the <code>close</code> method of this file input stream is
 * called when there are no more references to it.
 *
 * @exception  IOException  if an I/O error occurs.
 * @see        java.io.FileInputStream#close()
 */
protected void finalize() throws IOException {
    if ((fd != null) &&  (fd != FileDescriptor.in)) {
        /* if fd is shared, the references in FileDescriptor
         * will ensure that finalizer is only called when
         * safe to do so. All references using the fd have
         * become unreachable. We can call close()
         */
        close();
    }
}

這就解釋了,為什么只是時不時的會出現(xiàn)提示,并不是總是。這個方法什么時候被調用,這取決于虛擬機的垃圾回收頻次。

但是在實際的開發(fā)過程中,開發(fā)者不能完全依賴虛擬機幫你回收這些系統(tǒng)資源,只要涉及到流的操作,強烈建議大家一定要手動關閉釋放資源,避免出現(xiàn)一些不必要的bug。

具體如何手動釋放資源資源呢,我們接著看!

三、正確的關閉流姿勢介紹

我們深知在操作 Java 流對象后要將流進行關閉,但是現(xiàn)實的情況卻往往不盡人意,原因是每個開發(fā)者的寫法可能不盡相同,不同的寫法導致出現(xiàn)各種千奇百怪的問題,下面我們一起來看看幾種關閉流的代碼案例!

寫法 1:在 try 中關流,而沒在 finally 中關流

try {
    OutputStream out = new FileOutputStream("file");
    // ...操作流代碼
    out.close();
} catch (Exception e) {
    e.printStackTrace();
}

當操作流代碼報錯的時候,這種寫法會導致流無法正常的關閉,因此不推薦采用!

正確的操作方式,應該在finally里面完成,實例代碼如下:

OutputStream out = null;
try {
    out = new FileOutputStream("file");
    // ...操作流代碼
} catch (Exception e) {
    e.printStackTrace();
} finally {
    // 在 finally 中進行關閉,確保一定能被執(zhí)行
    try {
        if (out != null) {
            out.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

寫法 2:在關閉多個流時,將其放在一個 try 中

在關閉多個流時,有的同學嫌棄麻煩,將其放在一個 try 中完成,實例代碼如下:

OutputStream out1 = null;
OutputStream out2 = null;
try {
    out1 = new FileOutputStream("file");
    out2 = new FileOutputStream("file");
    // ...操作流代碼
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (out1 != null) {
            // 如果此處出現(xiàn)異常,則out2流沒有被關閉
            out1.close();
        }
        if (out2 != null) {
            out2.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

這種寫法下,當out1.close出異常的時候,out2.close是不會被正常關閉的,因此不推薦采用!

正確的操作方式,應該是一個一個的close,別偷懶,實例代碼如下:

OutputStream out1 = null;
OutputStream out2 = null;
try {
    out1 = new FileOutputStream("file");
    out2 = new FileOutputStream("file");
    // ...操作流代碼
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (out1 != null) {
            out1.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        if (out2 != null) {
            out2.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

寫法 3:在循環(huán)中創(chuàng)建流,在循環(huán)外關閉

有的同學在循環(huán)操作多個文件時,在循環(huán)外關閉文件流,實例代碼如下:

OutputStream out = null;
try {
    for (int i = 0; i < 10; i++) {
        out = new FileOutputStream("file");
        // ...操作流代碼
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        if (out != null) {
            out.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

表面看上去好像沒有問題,但是實際上創(chuàng)建了 10 個 IO 流,try 里面的邏輯執(zhí)行完成之后,只是把最后的一個 IO 流對象賦予給了out參數(shù)。也就是當程序執(zhí)行完畢之后,只關閉了最后一個 IO 流,其它 9 個 IO 流沒用被手動關閉,因此不推薦采用!

正確的操作方式,應該是在循環(huán)體內close,別偷懶,實例代碼如下:

for (int i = 0; i < 10; i++) {
    OutputStream out = null;
    try {
        out = new FileOutputStream("file");
        // ...操作流代碼
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

寫法 4:關閉多個流時,沒用遵循后定義先釋放原則

有的同學在操作多個文件流時,操作完成之后,依照先后次序進行關閉文件流,實例代碼如下:

FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
    fos = new FileOutputStream("file");
    bos = new BufferedOutputStream(fos);
    // ...操作流代碼
} catch (Exception e){

} finally {
    // 依次關閉流
    try {
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        // 此處會報 java.io.IOException: Stream Closed 錯誤
        bos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

按照先后順序關閉文件流,這種寫法下,有可能會報java.io.IOException: Stream Closed錯誤。

原因是BufferedOutputStream依賴于FileOutputStream,如果直接關閉FileOutputStream流,再次關閉BufferedOutputStream,會提示源頭已經被關閉,緩存區(qū)數(shù)據(jù)無法輸出。

正確的操作方式,應該遵循后定義先釋放的原則,實例代碼如下:

FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
    fos = new FileOutputStream("file");
    bos = new BufferedOutputStream(fos);
    // ...操作流代碼
} catch (Exception e){

} finally {
    // 后定義先釋放
    try {
        bos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

寫法 5:jdk7 及以上版本,推薦采用 try-with-resources 寫法

try-with-resources是 JDK 7 中引入的一個新的異常處理機制,它能讓開發(fā)人員不用顯式的釋放try-catch語句塊中使用的資源。

以上文為例,可以改成如下寫法:

try (FileOutputStream fos = new FileOutputStream("file");
     BufferedOutputStream bos = new BufferedOutputStream(fos)){
    // ...操作流代碼
} catch (Exception e){
    e.printStackTrace();
}

try-with-resources釋放資源的操作,也是遵循的后定義先釋放的原則!

寫法 6:使用包裝流時,只需要關閉最后面的包裝流即可

包裝流是指通過裝飾設計模式實現(xiàn)的 IO 流類,其目的是對底層流的功能進行擴展,在實際數(shù)據(jù)傳輸?shù)臅r候,還是使用底層流進行傳輸。比如緩存字節(jié)輸出流BufferedOutputStream就是一個包裝流,目的是對字節(jié)輸出流提供一個緩存區(qū)功能,讓數(shù)據(jù)輸出效率更高。

在使用到包裝流的時候,我們只需要關閉最后面的包裝流即可。

以上文為例,改寫的實例代碼如下:

InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
    is = new FileInputStream("file");
    isr = new InputStreamReader(is);
    br = new BufferedReader(isr);
    // ...操作流代碼
} catch (Exception e){
    e.printStackTrace();
} finally {
    // 關閉包裝流,也會自動關閉 InputStream 流
    try {
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

這是因為,包裝流關閉時會調用原生流的關閉方法,請看源碼!

public void close() throws IOException {
    synchronized (lock) {
        if (in == null)
            return;
        try {
            // 這里的in 指的是 InputStreamReader,最后會原生流的close方法
            in.close();
        } finally {
            in = null;
            cb = null;
        }
    }
}

四、內存流是否需要關閉?

在上文中,我們提到只要是 IO 流都建議大家手機關閉資源,但是在 Java 中有一種流,它是不需要手動關閉的,比如內存讀寫流:ByteArrayInputStream、ByteArrayOutputStream。

不同于指向硬盤的流,ByteArrayInputStream和ByteArrayOutputStream其實是偽裝成流的字節(jié)數(shù)組存儲在內存中(把它們當成字節(jié)數(shù)據(jù)來看就好了),他們不會鎖定任何文件句柄和端口,如果不再被使用,字節(jié)數(shù)組會被垃圾回收掉,所以不需要關閉。

當 IO 流是指向存儲卡 / 硬盤 / 網(wǎng)絡等外部資源的流,是一定要手動關閉的。

五、小結

本位主要圍繞【為什么 IO 流必須手動關閉,不能像其他的方法坐等 GC 處理】這個話題進行一次內容的整合和總結,同時也給出了推薦的正確關閉 IO 流的寫法。

在實際的開發(fā)過程中,建議大家正確的使用 IO 流,以免出現(xiàn)各種 bug !

內容難免有所遺漏,歡迎網(wǎng)友留言指出。

六、參考

1、csdn - 演員12138 - IO流為什么必須手動關閉,不能像其他的方法坐等GC處理

2、csdn - 思想永無止境 - Java之關閉流

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2024-12-30 09:22:11

2025-01-14 08:42:34

IO流程序語句

2023-12-07 12:21:04

GCJVM垃圾

2011-11-10 10:39:21

蘋果Siri

2021-01-21 08:00:25

JVM

2020-05-08 15:48:33

手機PCAndroid

2019-11-17 22:38:13

PAM特權訪問管理CISO

2015-04-03 12:31:26

OracleSalesforce并購

2023-11-26 00:24:33

2023-12-19 07:56:08

微服務軟件測試左移測試

2021-01-08 10:05:01

JavaSpring Boojar

2022-10-08 18:25:22

Python內存管理GC

2022-11-25 07:59:43

JavaIOGuava

2020-10-30 14:19:52

密碼手機重啟指紋

2021-12-17 22:56:27

前端測試框架

2021-02-28 13:22:29

物聯(lián)網(wǎng)5G技術

2014-07-02 16:51:08

WOT2014高效技術團隊

2010-08-12 10:54:26

惠普

2025-04-30 10:49:11

Java序列化反序列化

2014-06-24 09:35:09

算法算法進化
點贊
收藏

51CTO技術棧公眾號

精品夜夜澡人妻无码av| 妞干网在线播放| 91在线你懂的| 伊人影院久久| 一区二区亚洲欧洲国产日韩| 日韩欧美亚洲另类| 国产黄大片在线观看| 99久久久久久99| 国产精自产拍久久久久久蜜| 国产极品美女在线| 欧美美女在线直播| 欧美一区二区三区人| av天堂永久资源网| 亚洲小说区图片| 欧美激情一区不卡| 国产精品一区二区你懂得| 中文天堂在线播放| 中文精品在线| 欧美不卡视频一区发布| 精品无码国产污污污免费网站| 日韩在线亚洲| 欧美三级日韩在线| 国产日产欧美视频| 欧美伦理免费在线| 亚洲视频一二区| 日韩精品大片| 欧美日韩伦理片| 成人免费视频国产在线观看| 91久久国产精品91久久性色| 国产一区免费看| 翔田千里一区二区| 欧美精品www| 91aaa在线观看| 91视频综合| 在线观看精品自拍私拍| 亚洲综合网在线观看| 麻豆国产欧美一区二区三区r| 91精品国产乱| 九九热精品国产| 日韩一区二区三区在线免费观看| 国产精品成人免费| 国产精品久久久久久久小唯西川| 国产精品视频a| 麻豆freexxxx性91精品| 国产精品私拍pans大尺度在线| 91精品国产高清一区二区三密臀| 在线综合视频| 91sa在线看| 国产区在线观看视频| 亚洲韩日在线| 91极品女神在线| 日韩特黄一级片| 在线日韩电影| 高清视频欧美一级| 精品国产免费观看| 亚洲一区二区伦理| 国产成人综合精品在线| 免费黄色av片| 免费在线观看一区二区三区| 国产精品视频免费在线| 亚洲一区中文字幕永久在线| 精品一区二区免费| 91精品啪在线观看麻豆免费| 国产手机av在线| 国产不卡高清在线观看视频| 国产乱码一区| 欧美3p视频在线观看| 国产亚洲精久久久久久| 中文字幕一区二区三区乱码 | 成人一区二区三区视频在线观看| 91久久伊人青青碰碰婷婷| 国产福利视频导航| aaa亚洲精品| 欧美一级二级三级九九九| 国产福利电影在线| 亚洲男女一区二区三区| wwwwww欧美| 中文字幕21页在线看| 欧美午夜精品一区二区三区| 加勒比av中文字幕| 91精品尤物| 亚洲欧美激情在线视频| 国产免费嫩草影院| 国产精品二区影院| 日本国产欧美一区二区三区| 一级黄色片在线播放| 成人动漫精品一区二区| 日韩欧美亚洲日产国产| 天堂av最新在线| 色综合视频在线观看| 黄色小视频免费网站| 国产精品久久久网站| 在线观看国产精品91| 久久精品第一页| 日韩激情在线观看| 成人在线免费观看一区| 成人免费黄色网页| 亚洲国产精品尤物yw在线观看| 国产综合免费视频| 日韩免费一级| 中文字幕日韩专区| 精品久久免费视频| 精品在线免费视频| 青青草原亚洲| 男人添女人下部高潮视频在线观看| 日本高清无吗v一区| 国产人妻精品久久久久野外| 亚洲制服一区| 久久久久久久久久国产| 亚洲天堂狠狠干| 99久久久精品免费观看国产蜜| eeuss中文| 亚洲天堂一区二区| 亚洲国产精品久久久久久| 亚洲女人毛茸茸高潮| 一区二区日本视频| 亚洲自拍偷拍在线| 欧美人xxx| 91久久久免费一区二区| 秘密基地免费观看完整版中文 | 国产中文字幕视频在线观看| 国产精品免费精品自在线观看| 亚洲欧美中文字幕在线一区| 日本三级视频在线| 狠狠狠色丁香婷婷综合激情| 日韩三级在线播放| 成人欧美大片| 亚洲精品国产福利| 久久午夜无码鲁丝片| 久久97超碰色| 亚洲国产另类久久久精品极度| 亚洲性受xxx喷奶水| 亚洲成人精品久久| 国产一级免费av| 国产精品一级片| 熟妇熟女乱妇乱女网站| 欧美黄页在线免费观看| 国产午夜精品全部视频播放| 国产精品第5页| 91捆绑美女网站| 久久美女福利视频| 亚洲黄色录像| 欧洲精品在线视频| 欧美69xxxxx| 色综合久久88色综合天天6 | 亚洲欧美日韩中文字幕一区二区三区| 午夜免费福利在线| 日韩激情免费| 国产情人节一区| 九七久久人人| 欧美一区三区四区| 老湿机69福利| 国产成人亚洲综合a∨婷婷图片| 青青草免费在线视频观看| 久久久精品区| 欧美夫妻性视频| 黄色美女一级片| 婷婷久久综合九色综合伊人色| 熟女人妻一区二区三区免费看| 影音先锋亚洲电影| 精品日韩美女| 97人人做人人爽香蕉精品| 正在播放欧美视频| 国产免费一区二区三区最新不卡| 有坂深雪av一区二区精品| 亚洲欧美日韩色| 香蕉成人久久| 亚洲精品影院| 亚洲一区二区电影| 91国语精品自产拍在线观看性色 | 国产精品伊人久久 | 手机在线看片1024| 日本一二三四高清不卡| 91热视频在线观看| 在线欧美不卡| 日本一区不卡| 精品一区二区三区在线观看视频 | 动漫精品一区一码二码三码四码| 粉嫩av一区二区三区| 久久精品.com| 小处雏高清一区二区三区| 国产一区二区高清视频| 国产亚洲一区二区手机在线观看 | 亚洲一区 二区| 日韩美女在线观看| 97影院秋霞午夜在线观看| 精品一区精品二区| 亚洲资源在线播放| 婷婷夜色潮精品综合在线| av永久免费观看| 国产精品888| 91av俱乐部| 国产精品豆花视频| 亚洲精品国产一区| 精品人人人人| 国产日产久久高清欧美一区| 9999在线视频| 久久在线视频在线| 免费成人av电影| 精品久久久三级丝袜| 国产一级片免费视频| 亚洲a一区二区| 天天色影综合网| www国产成人免费观看视频 深夜成人网| 日日干夜夜操s8| 亚洲欧美清纯在线制服| 黄色录像特级片| av永久不卡| 精品国产一区二区三区免费 | 日韩av在线资源| av一区二区三| 欧美日韩夫妻久久| 日韩精品一区不卡| 欧美午夜美女看片| 久久久香蕉视频| 亚洲精品免费在线| 九九热久久免费视频| 国产欧美一区二区精品秋霞影院| 日韩成人av一区二区| 国产98色在线|日韩| 毛片毛片毛片毛| 人禽交欧美网站| 欧美污视频网站| 夜夜嗨网站十八久久| 国产毛片久久久久久国产毛片| 99久久婷婷| 色之综合天天综合色天天棕色| 日韩在线你懂的| 国产传媒一区二区| 日韩精品久久久久久久软件91| 成人h片在线播放免费网站| 色香欲www7777综合网| 欧美亚洲视频在线观看| av在线资源| 性欧美长视频免费观看不卡| 男男gaygays亚洲| 欧美肥臀大乳一区二区免费视频| 欧美被日视频| 久久精品福利视频| 浪潮av一区| 欧美成人免费小视频| 国产精品剧情一区二区在线观看 | 欧美日韩精品免费观看视一区二区| 久久大胆人体视频| 玛丽玛丽电影原版免费观看1977 | 日韩在线视频免费播放| 午夜一区二区三区在线观看| 国产五月天婷婷| 红桃av永久久久| 中文字幕第15页| 色综合久久中文字幕| 亚洲国产精品无码久久久| 91高清视频在线| 伊人免费在线观看高清版| 欧美天堂亚洲电影院在线播放| 中日韩av在线| 欧美精品aⅴ在线视频| a级片在线视频| 精品国产一区二区三区四区四 | 波多野结衣视频在线观看| 欧美性猛片xxxx免费看久爱| 亚洲手机在线观看| 日韩免费性生活视频播放| 欧美一级淫片aaaaaa| 国产丝袜精品视频| 97在线观看免费观看高清 | 国产女人18水真多毛片18精品| 亚洲免费成人av| 日本天堂在线视频| 色香蕉久久蜜桃| 在线观看中文字幕网站| 日韩欧美成人午夜| 亚洲 欧美 精品| 中文字幕亚洲图片| 欧美xxxx视频| 国产精品 欧美在线| 久久精品九色| 蜜桃免费一区二区三区| 三区四区不卡| www.日本少妇| 日韩电影一二三区| 中文字幕久久久久久久| 99r国产精品| 乱老熟女一区二区三区| 亚洲国产一区二区视频| 久久永久免费视频| 日韩三级免费观看| 国产理论电影在线观看| 欧美大片大片在线播放| 婷婷六月国产精品久久不卡| 91人人爽人人爽人人精88v| 西野翔中文久久精品国产| 一区二区三区欧美在线| 亚洲全部视频| 想看黄色一级片| 久久久久9999亚洲精品| 久艹视频在线观看| 欧美探花视频资源| 亚洲av成人无码久久精品老人 | 欧美特级aaa| 成人爽a毛片一区二区免费| 黄色三级生活片| 亚洲国产cao| 136福利视频导航| 亚洲男人的天堂在线播放| 手机在线免费av| 成人激情视频小说免费下载| 国产精品午夜一区二区三区| 99久久久精品视频| 看电视剧不卡顿的网站| 爱爱免费小视频| 亚洲成va人在线观看| 国产剧情精品在线| 最近2019中文字幕在线高清| 日本不卡1234视频| 波多野结衣一区二区三区在线观看| 欧美色图激情小说| 国产l精品国产亚洲区久久| 国产99精品国产| 青青草在线观看视频| 欧美日韩国产大片| 成全电影播放在线观看国语| 欧美一级片在线播放| 林ゆな中文字幕一区二区| www.男人天堂网| 国产裸体歌舞团一区二区| 亚洲区一区二区三| 欧美三级午夜理伦三级中视频| 国产私拍精品| 国产成人鲁鲁免费视频a| 日韩成人动漫在线观看| 男人日女人视频网站| 懂色av一区二区三区免费看| 成年人一级黄色片| 91精品在线免费观看| 免费**毛片在线| 成人在线国产精品| 久久精品久久久| 一级 黄 色 片一| 亚洲精品一二三| 国产农村妇女毛片精品| 久久躁狠狠躁夜夜爽| 精品伊人久久| 成年女人18级毛片毛片免费| 成人毛片在线观看| 特一级黄色大片| 精品亚洲精品福利线在观看| 在线免费三级电影网站| 麻豆一区区三区四区产品精品蜜桃| 国产精品亚洲综合久久| 一本加勒比北条麻妃| 在线一区二区观看| av成人手机在线| 91久久久久久久久久久| 欧美精品一级| 国产草草浮力影院| 一道本成人在线| 日本电影在线观看网站| 91最新在线免费观看| 国产精品地址| 青青草福利视频| 欧美精选午夜久久久乱码6080| 成人免费在线| 国产精选在线观看91| 免费日韩av片| 国产精品18在线| 欧美一级高清大全免费观看| 国产夫妻在线| 亚洲国产一区二区三区在线| 国产在线播精品第三| 久久久久99精品| 亚洲人成电影网站色| 小说区图片区亚洲| 成品人视频ww入口| 国产丝袜欧美中文另类| av中文字幕在线免费观看| 91精品国产91久久久久久不卡 | 91污在线观看| 中文字幕免费观看视频| 欧美疯狂做受xxxx高潮| 精品成av人一区二区三区| 亚洲视频在线不卡| 欧美日韩一区免费| 二区三区在线观看| 久久一区二区三区欧美亚洲| 极品美女销魂一区二区三区免费| www.av视频在线观看| 尤物tv国产一区| 成人线上播放| 天堂中文av在线| 一本到一区二区三区| 污污的视频在线观看| 日本一区二区三区免费看| 国产福利不卡视频| 亚洲av无码不卡| 97av在线视频| 你懂的成人av| 青青青视频在线免费观看| 亚洲成人久久网| 国产高清日韩|