久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java NIO 文件通道 FileChannel 用法及原理

瀏覽:2日期:2022-08-18 14:07:05

FileChannel 提供了一種通過通道來訪問文件的方式,它可以通過帶參數 position(int) 方法定位到文件的任意位置開始進行操作,還能夠將文件映射到直接內存,提高大文件的訪問效率。本文將介紹其詳細用法和原理。

1. 通道獲取

FileChannel 可以通過 FileInputStream, FileOutputStream, RandomAccessFile 的對象中的 getChannel() 方法來獲取,也可以同通過靜態方法 FileChannel.open(Path, OpenOption ...) 來打開。

1.1 從 FileInputStream / FileOutputStream 中獲取

從 FileInputStream 對象中獲取的通道是以讀的方式打開文件,從 FileOutpuStream 對象中獲取的通道是以寫的方式打開文件。

FileOutputStream ous = new FileOutputStream(new File('a.txt'));FileChannel out = ous.getChannel(); // 獲取一個只讀通道FileInputStream ins = new FileInputStream(new File('a.txt'));FileChannel in = ins.getChannel(); // 獲取一個只寫通道

1.2 從 RandomAccessFile 中獲取

從 RandomAccessFaile 中獲取的通道取決于 RandomAccessFaile 對象是以什么方式創建的,'r', 'w', 'rw' 分別對應著讀模式,寫模式,以及讀寫模式。

RandomAccessFile file = new RandomAccessFile('a.txt', 'rw');FileChannel channel = file.getChannel(); // 獲取一個可讀寫文件通道

1.3 通過 FileChannel.open() 打開

通過靜態靜態方法 FileChannel.open() 打開的通道可以指定打開模式,模式通過 StandardOpenOption 枚舉類型指定。

FileChannel channel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.READ); // 以只讀的方式打開一個文件 a.txt 的通道2. 讀取數據

讀取數據的 read(ByteBuffer buf) 方法返回的值表示讀取到的字節數,如果讀到了文件末尾,返回值為 -1。讀取數據時,position 會往后移動。

2.1 將數據讀取到單個緩沖區

和一般通道的操作一樣,數據也是需要讀取到1個緩沖區中,然后從緩沖區取出數據。在調用 read 方法讀取數據的時候,可以傳入參數 position 和 length 來指定開始讀取的位置和長度。

FileChannel channel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.READ);ByteBuffer buf = ByteBuffer.allocate(5);while(channel.read(buf)!=-1){ buf.flip(); System.out.print(new String(buf.array())); buf.clear();}channel.close();

2.2 讀取到多個緩沖區

文件通道 FileChannel 實現了 ScatteringByteChannel 接口,可以將文件通道中的內容同時讀取到多個 ByteBuffer 當中,這在處理包含若干長度固定數據塊的文件時很有用。

ScatteringByteChannel channel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.READ);ByteBuffer key = ByteBuffer.allocate(5), value=ByteBuffer.allocate(10);ByteBuffer[] buffers = new ByteBuffer[]{key, value};while(channel.read(buffers)!=-1){ key.flip(); value.flip(); System.out.println(new String(key.array())); System.out.println(new String(value.array())); key.clear(); value.clear();}channel.close();3. 寫入數據

3.1 從單個緩沖區寫入

單個緩沖區操作也非常簡單,它返回往通道中寫入的字節數。

FileChannel channel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.WRITE);ByteBuffer buf = ByteBuffer.allocate(5);byte[] data = 'Hello, Java NIO.'.getBytes();for (int i = 0; i < data.length; ) { buf.put(data, i, Math.min(data.length - i, buf.limit() - buf.position())); buf.flip(); i += channel.write(buf); buf.compact();}channel.force(false);channel.close();

3.2 從多個緩沖區寫入

FileChannel 實現了 GatherringByteChannel 接口,與 ScatteringByteChannel 相呼應。可以一次性將多個緩沖區的數據寫入到通道中。

FileChannel channel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.WRITE);ByteBuffer key = ByteBuffer.allocate(10), value = ByteBuffer.allocate(10);byte[] data = '017 Robothy'.getBytes();key.put(data, 0, 3);value.put(data, 4, data.length-4);ByteBuffer[] buffers = new ByteBuffer[]{key, value};key.flip();value.flip();channel.write(buffers);channel.force(false); // 將數據刷出到磁盤channel.close();

3.3 數據刷出

為了減少訪問磁盤的次數,通過文件通道對文件進行操作之后可能不會立即刷出到磁盤,此時如果系統崩潰,將導致數據的丟失。為了減少這種風險,在進行了重要數據的操作之后應該調用 force() 方法強制將數據刷出到磁盤。

無論是否對文件進行過修改操作,即使文件通道是以只讀模式打開的,只要調用了 force(metaData) 方法,就會進行一次 I/O 操作。參數 metaData 指定是否將元數據(例如:訪問時間)也刷出到磁盤。

channel.force(false); // 將數據刷出到磁盤,但不包括元數據4. 文件鎖

可以通過調用 FileChannel 的 lock() 或者 tryLock() 方法來獲得一個文件鎖,獲取鎖的時候可以指定參數起始位置 position,鎖定大小 size,是否共享 shared。如果沒有指定參數,默認參數為 position = 0, size = Long.MAX_VALUE, shared = false。

位置 position 和大小 size 不需要嚴格與文件保持一致,position 和 size 均可以超過文件的大小范圍。例如:文件大小為 100,可以指定位置為 200, 大小為 50;則當文件大小擴展到 250 時,[200,250) 的部分會被鎖住。

shared 參數指定是排他的還是共享的。要獲取共享鎖,文件通道必須是可讀的;要獲取排他鎖,文件通道必須是可寫的。

由于 Java 的文件鎖直接映射為操作系統的文件鎖實現,因此獲取文件鎖時代表的是整個虛擬機,而非當前線程。若操作系統不支持共享的文件鎖,即使指定了文件鎖是共享的,也會被轉化為排他鎖。

FileLock lock = channel.lock(0, Long.MAX_VALUE, false);// 排它鎖,此時同一操作系統下的其它進程不能訪問 a.txtSystem.out.println('Channel locked in exclusive mode.');Thread.sleep(30 * 1000L); // 鎖住 30 slock.release(); // 釋放鎖lock = channel.lock(0, Long.MAX_VALUE, true); // 共享鎖,此時文件可以被其它文件訪問System.out.println('Channel locked in shared mode.');Thread.sleep(30 * 1000L); // 鎖住 30 slock.release();

與 lock() 相比,tryLock() 是非阻塞的,無論是否能夠獲取到鎖,它都會立即返回。若 tryLock() 請求鎖定的區域已經被操作系統內的其它的進程鎖住了,則返回 null;而 lock() 會阻塞,直到獲取到了鎖、通道被關閉或者線程被中斷為止。

5. 通道轉換

普通的讀寫方式是利用一個 ByteBuffer 緩沖區,作為數據的容器。但如果是兩個通道之間的數據交互,利用緩沖區作為媒介是多余的。文件通道允許從一個 ReadableByteChannel 中直接輸入數據,也允許直接往 WritableByteChannel 中寫入數據。實現這兩個操作的分別為 transferFrom(ReadableByteChannel src, position, count) 和 transferTo(position, count, WritableChannel target) 方法。

這進行通道間的數據傳輸時,這兩個方法比使用 ByteBuffer 作為媒介的效率要高;很多操作系統支持文件系統緩存,兩個文件之間實際可能并沒有發生復制。

transferFrom 或者 transferTo 在調用之后并不會改變 position 的位置。

下面示例是一個 spring 源碼中的一個工具方法。

public static void copy(File source, File target) throws IOException { FileInputStream sourceOutStream = new FileInputStream(source); FileOutputStream targetOutStream = new FileOutputStream(target); FileChannel sourceChannel = sourceOutStream.getChannel(); FileChannel targetChannel = targetOutStream.getChannel(); sourceChannel.transferTo(0, sourceChannel.size(), targetChannel); sourceChannel.close(); targetChannel.close(); sourceOutStream.close(); targetOutStream.close();}

需要注意的是,調用這兩個轉換方法之后,某些情況下并不保證數據能夠全部完成傳輸,確切傳輸了多少字節的數據需要根據返回的值來進行判斷。例如:從一個非阻塞模式下的 SocketChannel 中輸入數據就不能夠一次性將數據全部傳輸過來,或者將文件通道的數據傳輸給一個非阻塞模式下的 SocketChannel 不能一次性傳輸過去。

下面給出一個示例,客戶端連接到服務端,然后從服務端下載一個叫 video.mp4 文件,文件在當前目錄存在。

錯誤示例:

/** 服務端 **/ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); // 打開服務通道serverSocketChannel.bind(new InetSocketAddress(9090)); // 綁定端口號SocketChannel clientChannel = serverSocketChannel.accept(); // 等待客戶端連接,獲取 SocketChannelFileChannel fileChannel = FileChannel.open(Paths.get('video.mp4'), StandardOpenOption.READ); // 打開文件通道fileChannel.transferTo(0, fileChannel.size(), clientChannel); // 【可能出錯位置】文件通道數據輸出轉化到 socket 通道,輸出范圍為整個文件。文件太大將導致輸出不完整/** 客戶端 **/SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress('localhost', 9090)); // 打卡 socket 通道并連接到服務端FileChannel fileChannel = FileChannel.open(Paths.get('video-downloaded.mp4'), StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE, StandardOpenOption.CREATE); // 打開文件通道fileChannel.transferFrom(socketChannel, 0, Long.MAX_VALUE); // 【非阻塞模式下可能出錯】fileChannel.force(false); // 確保數據刷出到磁盤

正確的姿勢是:transferTo/transferFrom 的時候應該用一個循環檢查實際輸出內容大小是否和期望輸出內容大小一致,特別是通道處于非阻塞模式下,極大概率不能夠一次傳輸完成。

所以服務端正確的轉換方式是:

long transfered = 0;while (transfered < fileChannel.size()){ transfered += fileChannel.transferTo(transfered, fileChannel.size(), clientChannel);}

本例中客戶端使用的是阻塞模式,服務端通道關閉輸出(socketChannel.shutdownOutput())之后 transferFrom 才退出,服務端正常關閉通道的情況下數據傳輸不會出錯,這里就不處理非正常關閉的情況了。(完整代碼)。

6. 截取文件

FileChannel.truncate(long size) 可以截取指定的文件,指定大小之后的內容將被丟棄。size 的值可以超過文件大小,超過的話不會截取任何內容,也不會增加任何內容。

FileChannel fileChannel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.WRITE);fileChannel.truncate(1);System.out.println(fileChannel.size()); // 輸出 1fileChannel.write(ByteBuffer.wrap('Hello'.getBytes()));System.out.println(fileChannel.size()); // 輸出 5fileChannel.force(true);fileChannel.close();7. 映射文件到直接內存

文件通道 FileChannel 可以將文件的指定范圍映射到程序的地址空間中,映射部分使用字節緩沖區的一個子類 MappedByteBuffer 的對象表示,只要對映射字節緩沖區進行操作就能夠達到操作文件的效果。與之相對應的,前面介紹的內容是通過操作文件通道和堆內存中的字節緩沖區 HeapByteBuffer 來達到操作文件的目的。

通過 ByteBuffer.allocate() 分配的緩沖區是一個 HeapByteBuffer,存在于 JVM 堆中;而 FileChannle.map() 將文件映射到直接內存,返回的是一個 MappedByteBuffer,存在于堆外的直接內存中;這塊內存在 MappedByteBuffer 對象本身被回收之前有效。

7.1 內存映射原理

前面使用堆緩沖區 ByteBuffer 和文件通道 FileChannel 對文件的操作使用的是 read()/write() 系統調用。讀取數據時數據從 I/O 設備讀到內核緩存,再從內核緩存復制到用戶空間緩存,這里是 JVM 的堆內存。而映射磁盤文件是使用 mmap() 系統調用,將文件的指定部分映射到程序地址空間中;數據交互發生在 I/O 設備于用戶空間之間,不需要經過內核空間。

雖然映射磁盤文件減少了一次數據復制,但對于大多數操作系統來說,將文件映射到內存這個操作本身開銷較大;如果操作的文件很小,只有數十KB,映射文件所獲得的好處將不及其開銷。因此,只有在操作大文件的時候才將其映射到直接內存。

7.2 映射緩沖區用法

文件通道 FileChanle 通過成員方法 map(MapMode mode, long position, long size) 將文件映射到應用內存。

FileChannel fileChannel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.READ, StandardOpenOption.WRITE); // 以讀寫的方式打開文件通道MappedByteBuffer buf = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, fileChannel.size()); // 將整個文件映射到內存

mode 表示打開模式,為枚舉值,其值可以為 READ_ONLY, READ_WRITE, PRIVATE。+ 模式為 READ_ONLY 時,不能對 buf 進行寫操作;+ 模式為 READ_WRITE 時,通道 fileChannel 必須具有讀寫文件的權限;對 buf 進行的寫操作將對文件生效,但不保證立即同步到 I/O 設備;+ 模式為 PRIVATE 時,通道 fileChannle 必須對文件有讀寫權限;但是對文件的修改操作不會傳播到 I/O 設備,而是會在內存復制一份數據。此時對文件的修改對其它線程和進程不可見。

position 指定文件的開始映射到內存的位置;

size 指定映射的大小,值為非負 int 型整數。

調用 map() 方法之后,返回的 MappedByteBuffer 就于 fileChannel 脫離了關系,關閉 fileChannel 對 buf 沒有影響。同時,如果要確保對 buf 修改的數據能夠同步到文件 I/O 設備中,需要調用 MappedByteBuffer 中的無參數的 force() 方法,而調用 FileChannel 中的 force(metaData) 方法無效。

此時可以通過操作緩沖區來操作文件了。不過映射的內容存在于 JVM 程序的堆外內存中,這部分內存是虛擬內存,意味著 buf 中的內容不一定都在物理內存中,要讓這些內容加載到物理內存,可以調用 MappedByteBuffer 中的 load() 方法。另外,還可以調用 isLoaded() 來判斷 buf 中的內容是否在物理內存中。

FileChannel fileChannel = FileChannel.open(Paths.get('a.txt'), StandardOpenOption.WRITE, StandardOpenOption.READ);MappedByteBuffer buf = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, fileChannel.size());fileChannel.close(); // 關于文件通道對 buf 沒有影響System.out.println(buf.capacity()); // 輸出 fileChannel.size()System.out.println(buf.limit()); // 輸出 fileChannel.size()System.out.println(buf.position()); // 輸出 0buf.put((byte)’R’); // 寫入內容buf.compact(); // 截掉 positoin 之前的內容buf.force(); // 將數據刷出到 I/O 設備8. 小結

1)文件通道 FileChannel 能夠將數據從 I/O 設備中讀入(read)到字節緩沖區中,或者將字節緩沖區中的數據寫入(write)到 I/O 設備中。

2)文件通道能夠轉換到 (transferTo) 一個可寫通道中,也可以從一個可讀通道轉換而來(transferFrom)。這種方式使用于通道之間地數據傳輸,比使用緩沖區更加高效。

3)文件通道能夠將文件的部分內容映射(map)到 JVM 堆外內存中,這種方式適合處理大文件,不適合處理小文件,因為映射過程本身開銷很大。

4)在對文件進行重要的操作之后,應該將數據刷出刷出(force)到磁盤,避免操作系統崩潰導致的數據丟失。

到此這篇關于Java NIO 文件通道 FileChannel 用法的文章就介紹到這了,更多相關Java NIO 文件通道 FileChannel內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 成人在线免费 | 全毛片 | 国产精品久久久久久久久久东京 | 成人一级毛片 | 山岸逢花在线 | 久久综合九九 | 国产1区2区3区 | 国产日韩欧美 | 久久精品国产99国产精品 | 久久免费黄色网址 | 在线播放国产一区二区三区 | 国产成人精品一区二区三区视频 | 久久久久久久久一区二区三区 | 伊人看片 | 中文字幕av一区二区三区 | 九色网址 | 国产精品久久久久永久免费观看 | 少妇性l交大片免费一 | 99re免费视频精品全部 | 国产激情在线观看视频 | 一级在线观看 | 国产成人精品免高潮在线观看 | 欧美精品一区二 | 亚洲一区视频 | 综合99 | 美日韩免费视频 | 精品久久久久久久久久久久久久 | 狠狠综合久久av一区二区小说 | 在线天堂新版最新版在线8 www.国产欧美 | 日本亚洲精品一区二区三区 | 亚洲一区精品在线 | 日韩免费在线 | 制服 丝袜 激情 欧洲 亚洲 | 国精产品99永久一区一区 | 日韩综合| 午夜播影院 | 亚洲天堂久久 | 成人精品一区二区 | 国内精品一区二区三区视频 | 久久久精品 | 成人在线播放 | 999久久久久久久久 国产欧美在线观看 | 亚洲视频一区 | 久久精品成人 | 北条麻妃一区二区三区在线观看 | 日韩一区免费在线观看 | 国产精品久久久久久久久免费桃花 | 狠狠操夜夜操 | 北条麻妃一区二区三区在线观看 | 欧美日韩一区二区三区四区 | 欧美精品99 | 欧美在线视频三区 | 午夜在线小视频 | 黄色三级网站 | 国产欧美一区二区精品忘忧草 | 91在线免费看 | 一级片在线免费看 | 日本在线视 | 亚洲成人三区 | 欧美国产一区二区 | 国产精品成人观看视频国产奇米 | 福利二区视频 | 日韩一区二区福利视频 | 久久久国产视频 | 欧美精品1区| 精品久久不卡 | 99热在线精品免费 | 福利电影在线 | 欧美三级电影在线播放 | 亚洲男人的天堂在线播放 | 欧美日韩视频在线观看一区 | 成人午夜精品一区二区三区 | 免费久久网站 | 久久久久久久成人 | 久久免费精品视频 | 国产中文在线 | 日本高清视频一区二区三区 | 亚洲不卡 | 国产精品久久久久久一区二区三区 | 国产成人午夜精品5599 | 国产一区成人 | 国产视频三区 | 成人精品视频免费 | 日韩国产一区二区三区 | 国产一区二区三区在线免费 | 欧美三级电影在线播放 | 毛片久久久 | 成年人黄色一级毛片 | 色8久久| 波多野结衣一二三四区 | 波多野结衣一二三四区 | 亚洲免费成人av | 午夜视频在线播放 | 91精品国产成人 | 国产在线看h| 91av视频在线观看 | 国产精品久久久久久久久免费丝袜 | 久久国产亚洲 | 久久黄网| www久久精品| 天天干天天谢 | 9久久 | 国产伦精品一区二区三区在线 | 亚洲一区二区中文字幕 | 九一视频在线免费观看 | 97伦理电影网 | 日韩精品在线观看一区 | 色婷婷国产精品综合在线观看 | 97成人在线| 亚洲欧美中文日韩在线v日本 | 久久精品2 | 亚洲精品久久久久久久久久久 | 国产在线不卡一区 | 天天影视色香欲 | 中文字幕八区 | 亚洲视频一区 | 日韩av网页 | 玖玖视频 | 久久草在线视频 | 中文字幕在线观看av | www国产亚洲精品久久网站 | 欧美日韩成人在线视频 | 成人亚洲电影 | 午夜欧美 | 国产一区二区三区四区在线观看 | 久久久久久久国产 | 欧美成人一区二区三区片免费 | 天天操狠狠操 | 在线观看日韩精品 | 一区二区三区四区精品 | 欧美国产精品 | 日日网| 99热国产在线观看 | 亚洲欧美一区二区三区在线 | 国产精品一级 | 欧美激情在线精品一区二区三区 | 亚洲在线 | 日本午夜在线 | 亚洲cb精品一区二区三区 | 毛片一区二区 | 亚洲成人免费在线观看 | 日韩一区二区三区在线 | 成年人黄色一级毛片 | 国产麻豆乱码精品一区二区三区 | 成人av播放 | 成年人免费看 | 国产精品日韩欧美一区二区 | 日一区二区 | 久久黄色 | 99re6在线视频精品免费 | 亚洲精品乱码久久久久久麻豆不卡 | 伊人夜夜躁av伊人久久 | 极黄视频| 欧美一区二区三区在线 | 精品视频久久 | 午夜免费剧场 | 日韩欧美一区二区在线观看 | 羞羞视频在线免费 | 日韩不卡一区二区 | 亚洲一区二区在线看 | 国产成人午夜 | 欧美激情精品久久久久 | 中文字幕高清视频 | 密室大逃脱第六季大神版在线观看 | 妞干网av | 国产一区二区视频免费 | www.国产.com| 在线播放黄色片网站 | 国产亚洲精品久久久闺蜜 | 成人中文网 | 日韩成人在线观看 | 天天操天天色天天 | 黄色影片网址 | 国产欧美综合一区二区三区 | 色爱区综合 | 久久国| 色综合五月婷婷 | 国产精品二区三区在线观看 | 精品视频久久久久 | 成人亚洲免费视频 | 91精品中文字幕一区二区三区 | 欧洲一区 | 亚洲精品一区二区三区在线观看 | 欧美久久久久久久久久久久久久 | 欧美成人综合在线 | 日韩中文字幕免费在线播放 | 国产日韩视频在线播放 | 日韩精品久久久久久 | 在线国产视频 | 亚州激情 | 日韩在线欧美 | 亚洲精品一区二三区 | 黑人性dh| 日韩视频一区二区三区 | 久久久www成人免费无遮挡大片 | 国产999精品久久久久久 | 国产精品欧美日韩在线观看 | 精品国产精品三级精品av网址 | 久久成人国产精品 | 亚洲精品一二三 | 久久精品国产一区二区三区不卡 | 欧美人成在线观看 | 日日干夜夜干 | 亚洲午夜精品久久久久久app | 欧美一级做性受免费大片免费 | 91精品久久久久久久久久入口 | 欧美aaa大片 | 日本久久久久久 | 日韩精品免费在线视频 | 日本不卡一二三 | 国产精品亚洲一区 | 久久精品国产99国产 | 亚洲免费观看视频 | 最新中文字幕 | 欧美在线a | 中文字幕精品三级久久久 | 精品亚洲一区二区 | 精品国模一区二区三区欧美 | 日韩在线中文字幕 | 欧美日韩中文字幕 | 一区二区免费播放 | 亚洲视频一 | 午夜精品一区二区三区在线视频 | 免费在线日韩 | 日韩91精品| 亚洲三级视频 | 欧洲一级毛片 | 91中文在线观看 | 成人在线播放器 | 免费国产一区二区 | 免费一区 | 无码少妇一区二区三区 | 国产精品久久久麻豆 | 亚洲天堂一区 | 另类一区 | 成人在线免费 | a视频在线观看 | 精品无人乱码一区二区三区的优势 | 天堂国产 | 黄色在线免费观看 | 精品在线播放 | 成人亚洲精品久久久久 | 国产成人精品电影 | 亚洲一级黄色 | 可以在线观看的av网站 | 一区二区三区国产免费 | 久久精品中文 | 欧美激情视频一区二区三区 | 欧美精品亚洲精品 | 久久久精彩视频 | 日韩久久综合 | 欧美激情第1页 | 新99热 | 久久91 | 国产精品一区免费在线观看 | 欧美激情第1页 | 欧美视频免费在线 | 国产精品乱码一区二区三区 | 国产精品久久久久久久久久免费 | 欧洲一级毛片 | 亚洲一区日韩 | 中文字字幕在线 | 国产在线一区二区 | 精品中文在线 | 久久久精彩视频 | 国产黄 | 一区二区三区av | 在线成人av| 成人h动漫在线看 | √8天堂资源地址中文在线 成人欧美一区二区三区白人 | 欧美另类专区 | 欧洲一级毛片 | 国产精品久久久久久婷婷天堂 | 国家aaa的一级看片 操操操夜夜操 | 国产成人欧美一区二区三区的 | 日韩欧美一区二区三区久久婷婷 | 国产精品精品视频一区二区三区 | 亚洲精品一 | 欧美日一区二区 | 国产乱码精品一区二区三区忘忧草 | 成人在线视频播放 | 99re6热在线精品视频播放 | 一区二区免费 | 国产视频久久久 | 成av在线 | 91久久久久久久久久久久久 | 国产福利精品一区 | 精品一区二区三区免费视频 | 另类sb东北妇女av | 成人久久久久爱 | 日韩免费视频 | 成人欧美一区二区三区黑人孕妇 | 国产精品中文字幕在线播放 | 精品视频一区二区三区四区 | 欧美日韩第一页 | 天堂一区 | 毛片国产 | 日韩中文视频 | 国产精品久久久久久中文字 | 成人精品在线观看 | 国产天堂在线 | 性色av一二三杏吧传媒 | 精品国产一区二区三区日日嗨 | 香蕉久久一区二区不卡无毒影院 | 色综合中文 | www国产成人免费观看视频,深夜成人网 | 亚洲日韩中文字幕一区 | 韩日视频在线观看 | 国产成人精品在线 | 国产成人高清视频 | 久草新| 欧美日韩视频第一页 | 91精品国产综合久久婷婷香蕉 | 欧美福利网 | 在线播放亚洲 | 色综合中文 | 久久成人精品 | www.亚洲区| 黄色的视频免费 | 亚洲欧美日韩精品久久奇米色影视 | 欧美xxxⅹ性欧美大片 | 久久久久久影院 | 欧美激情小视频 | 成人一级黄色大片 | 香蕉久久夜色精品国产使用方法 | 午夜爽视频 | 国产传媒在线观看 | 一级片观看 | 美女视频一区 | 狠狠干干 | 日韩一区二区三区在线 | 在线观看国产www | av三级| 欧美日韩在线一区二区 | 欧美一级在线 | 日本欧美在线 | 日本国产一区二区 | 久久久久久精 | 日韩另类| 欧美福利在线观看 | 欧美成人免费观看 | 欧美三级电影在线播放 | 成人免费高清 | 自拍偷拍99 | 中文字幕av免费 | 91传媒在线播放 | av中文字幕网 | 国产丝袜在线 | 99精品欧美一区二区蜜桃免费 | 91亚洲国产成人精品性色 | 国产精品日韩欧美一区二区三区 | 欧美精品网站 | 丁香五月亚洲综合在线 | 成人午夜精品一区二区三区 | 成人av免费在线 | 浴室洗澡偷拍一区二区 | 日韩在线中文字幕 | 久久精品二区亚洲w码 | jizz欧美最大 | 日韩精品免费视频 | 久久久性色精品国产免费观看 | 黄色天堂在线观看 | 男人久久久 | 日韩视频网 | 欧美精品网站 | 国产精品美女久久久久久免费 | 久在线视频 | 日本做暖暖视频高清观看 | 国产96视频 | 男人的天堂亚洲 | 很黄很色很爽的视频 | 国产精品永久免费自在线观看 | 97视频观看| 日本精品免费 | 欧美a在线 | 午夜视频在线观看免费视频 | 天天射日日操 | 日韩在线成人 | 亚洲一区中文字幕在线观看 | 欧美区国产 | 夜夜精品视频 | 午夜成人免费电影 | 免费中文字幕 | 中文成人无字幕乱码精品 | 在线观看国产 | 成人免费视频网站在线观看 | 亚洲一区二区三区精品视频 | 精品国产一区二区三区久久影院 | 国内精品国产成人国产三级粉色 | 亚洲欧美在线观看 | 国产精品久久久999 成人亚洲视频 | 91精品国产乱码久久久久久 | 最新日韩在线观看视频 | 96久久久久久 | 国产成人精品免高潮在线观看 | 日操| 欧美日韩在线一区 | 亚洲精品麻豆 | 毛片网在线观看 | 美日韩一区二区 | 欧美成人精品在线观看 | 久久亚洲综合 | 超碰999 | 午夜私人影院 | 成年人性视频 | а天堂中文最新一区二区三区 | 欧美日韩在线电影 | 国产亚洲网站 | 中国大陆高清aⅴ毛片 | 亚洲一区成人在线观看 | 日韩国产一区二区 | 日韩av免费在线观看 | 国产一区二区在线看 | 国产成人精品免高潮在线观看 | 一区二区三区精品视频 | 国产一区二区三区高清 | 精品久久久久久久久久久久久久久久久久 | 毛片网在线观看 | 久久久蜜桃 | 麻豆乱码国产一区二区三区 | 亚洲aⅴ天堂av在线电影软件 | 亚洲啪啪网站 | 欧美高清一区 | 久久久精品久久久久 | 亚洲高清在线观看 | 暖暖成人免费视频 | 日韩一区二区精品视频 | 久久久免费电影 | 亚洲福利一区二区 | 九九精品视频在线 | 麻豆自拍偷拍 | 九九精品视频在线 | 国产又色又爽又黄 | 久久久久久国产精品 | 欧美日韩三级在线 | 日本黄色影片在线观看 | 91在线导航 | 狠狠天天 | 一区二区三区在线观看免费 | 久久av资源 | 九九国产 | 久久精品无码一区二区日韩av | 欧美成人精品一区二区男人看 | 国产一级特黄视频 | 国产超碰人人模人人爽人人添 | 超碰激情 | 五月天婷婷综合 | 亚洲性人人天天夜夜摸 | av中文字幕在线 | 日本免费视频 | 亚洲在线观看免费视频 | 欧美一区二区三区 | 精品护士一区二区三区 | 中文字幕一二三区 | 一级欧美在线 | 欧美第7页| aaa在线免费观看 | 免费三级电影网站 | 日韩欧美一区在线 | 国产精品一区二区久久久久 | 日韩视频在线观看一区二区 | 欧美日韩在线视频免费 | 久久精品小视频 | 午夜激情福利视频 | 日韩精品www | 日本在线观看视频一区 | 先锋久久| 亚洲日韩欧美一区二区在线 | 色噜噜在线 | 国产视频精品一区二区三区 | 免费在线视频精品 | 在线观看污片 | 一区二区欧美在线 | 精品视频免费观看 | 在线免费观看色视频 | 中文字幕在线导航 | 久久免费福利视频 | 国产中文字幕在线 | 久久一级 | 99中文字幕 | 国产欧美在线观看 | 最新av在线网址 | 久久久久国产成人精品亚洲午夜 | 国产野精品久久久久久久不卡 | 亚洲国产视频精品 | 欧美成人午夜视频 | 日本一区二区三区四区 | 久久久久国产精品 | 99久久婷婷| 欧美日韩国产一区二区三区 | 欧美日韩在线不卡 | 国产高清中文字幕 | 国产亚洲精品久久久久动 | 久久视频一区二区 | 中文字幕精品一区久久久久 | 99久久电影 | 亚洲精品福利 | 久久青青 | 成人三级av | 久久久com | 欧美一级电影免费观看 | 中文字幕一区二区三区四区 | 久久久久久香蕉 | 国产日韩精品入口 | 国产成人精品午夜 | 中文在线a在线 | 在线视频国产一区 | 在线免费av观看 | 亚洲一区电影 | 国产精品一区久久久久 | 国产精品123 | 午夜影视剧场 | 亚洲精品乱码久久久久久蜜桃不爽 | 欧美日韩久久久 | 久久精品一区二区三区四区 | 日本精品免费在线观看 | 午夜视频福利在线观看 | 久久男人天堂 | 亚洲三级视频 | 羞羞视频免费观 | 国产青青草 | 亚洲国产日韩一区 | 91中文字幕在线观看 | 欧美一区二区日韩 | 91高清视频 | 亚洲日本欧美日韩高观看 | 成人亚洲网 | 日本成人中文字幕 | 极品久久久久久 | 成人精品视频99在线观看免费 | 99在线看 | 精品一区二区在线观看 | 黄免费看| 中文字幕在线免费视频 | 日精品 | 亚洲91 | 欧美一区二区三区精品 | 日本女人高潮视频 | 亚洲91精品| 久久国产亚洲精品 | 国产在线播放av | 亚洲成人精品一区二区三区 | 一区二区中文字幕 | 中文字幕国产在线视频 | 亚洲美女视频在线观看 | 久久不色 | 中文字幕本久久精品一区 | 天天操妹子 | 在线观看91精品国产入口 | 嫩草影院黄色 | 亚洲精品乱码久久久久久 | 日韩在线播放欧美字幕 | 伊人小视频| 亚州成人| 欧美中文字幕一区 | 国产日韩精品在线 | 伊人激情网 | 日韩国产在线观看 | 久久久99久久久国产自输拍 | 亚洲大奶网 | 成人涩涩日本国产一区 | 国内精品一区二区三区 | 国产精品欧美久久久久一区二区 | 成人免费一区二区三区视频软件 | 精品人伦一区二区三区蜜桃视频 | 亚洲精品亚洲人成人网 | 欧美亚洲成人一区 | 伊人网在线视频观看 | 成人免费视频网站在线看 | 欧洲精品一区 | 久久久精品一区二区三区 | 午夜日韩 | 高清国产一区二区三区四区五区 | 精品一区二区三区四区五区 | 龙珠z国语291集普通话 | 91免费看 | 亚洲国产精品自拍 | 成人国产精品久久久 | 久久精品国产视频 | 亚洲国产精品成人久久久 | 亚洲aⅴ网站 | 国产综合久久久久久鬼色 | www.亚洲一区二区 | 国产激情视频 | 狠狠操综合网 | 成人黄色av | 精品成人 | 亚洲成人久久久 | 99影视| 日韩6699人妻熟女毛片 | 亚洲网站免费看 | 国产精品理论电影 | 成人福利在线观看 | 久久亚洲欧美日韩精品专区 | 国产高清视频在线 | 成人一级黄色大片 | 国产九九精品视频 | 在线观看免费视频日韩 | 国产精品视频一区二区三区 | 爱爱视频在线 | 一级做a爰片毛片 | 久久久91| 国产乱码精品一区二区三区忘忧草 | 国产亚洲精品久久久 | 日韩三区| 久久久精品一区二区 | 国产精品久久久久久久久久妞妞 | 国产成人免费在线 | 国产精品久久久久一区二区三区 | 国产精品久久久久一区二区三区共 | 国产一级视频在线观看 | 一区二区欧美视频 | 国产视频福利在线 | 久久久99精品免费观看 | 国产精品成人3p一区二区三区 |