黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳

瀏覽:91日期:2022-09-04 15:13:17

完整代碼:https://github.com/iyuanyb/Downloader

多線程下載及斷點(diǎn)續(xù)傳的實(shí)現(xiàn)是使用 HTTP/1.1 引入的 Range 請求參數(shù),可以訪問Web資源的指定區(qū)間的內(nèi)容。雖然實(shí)現(xiàn)了多線程及斷點(diǎn)續(xù)傳,但還有很多不完善的地方。

包含四個類:

Downloader: 主類,負(fù)責(zé)分配任務(wù)給各個子線程,及檢測進(jìn)度DownloadFile: 表示要下載的哪個文件,為了能寫輸入到文件的指定位置,使用 RandomAccessFile 類操作文件,多個線程寫同一個文件需要保證線程安全,這里直接調(diào)用 getChannel 方法,獲取一個文件通道,F(xiàn)ileChannel是線程安全的。DownloadTask: 實(shí)際執(zhí)行下載的線程,獲取 [lowerBound, upperBound] 區(qū)間的數(shù)據(jù),當(dāng)下載過程中出現(xiàn)異常時要通知其他線程(使用 AtomicBoolean),結(jié)束下載Logger: 實(shí)時記錄下載進(jìn)度,以便續(xù)傳時知道從哪開始。感覺這里做的比較差,為了能實(shí)時寫出日志及方便地使用Properties類的load/store方法格式化輸入輸出,每次都是打開后再關(guān)閉。

演示:

隨便找一個文件下載:

基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳

強(qiáng)行結(jié)束程序并重新運(yùn)行:

基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳

日志文件:

斷點(diǎn)續(xù)傳的關(guān)鍵是記錄各個線程的下載進(jìn)度,這里細(xì)節(jié)比較多,花了很久。只需要記錄每個線程請求的Range區(qū)間極客,每次成功寫數(shù)據(jù)到文件時,就更新一次下載區(qū)間。下面是下載完成后的日志內(nèi)容。

基于Java實(shí)現(xiàn)多線程下載并允許斷點(diǎn)續(xù)傳

代碼:

Downloader.java

package downloader; import java.io.*;import java.net.*;import java.nio.file.Files;import java.nio.file.Path;import java.util.concurrent.atomic.AtomicBoolean; public class Downloader { private static final int DEFAULT_THREAD_COUNT = 4; // 默認(rèn)線程數(shù)量 private AtomicBoolean canceled; // 取消狀態(tài),如果有一個子線程出現(xiàn)異常,則取消整個下載任務(wù) private DownloadFile file; // 下載的文件對象 private String storageLocation; private final int threadCount; // 線程數(shù)量 private long fileSize; // 文件大小 private final String url; private long beginTime; // 開始時間 private Logger logger; public Downloader(String url) { this(url, DEFAULT_THREAD_COUNT); } public Downloader(String url, int threadCount) { this.url = url; this.threadCount = threadCount; this.canceled = new AtomicBoolean(false); this.storageLocation = url.substring(url.lastIndexOf(’/’)+1); this.logger = new Logger(storageLocation + '.log', url, threadCount); } public void start() { boolean reStart = Files.exists(Path.of(storageLocation + '.log')); if (reStart) { logger = new Logger(storageLocation + '.log'); System.out.printf('* 繼續(xù)上次下載進(jìn)度[已下載:%.2fMB]:%sn', logger.getWroteSize() / 1014.0 / 1024, url); } else { System.out.println('* 開始下載:' + url); } if (-1 == (this.fileSize = getFileSize())) return; System.out.printf('* 文件大小:%.2fMBn', fileSize / 1024.0 / 1024); this.beginTime = System.currentTimeMillis(); try { this.file = new DownloadFile(storageLocation, fileSize, logger); if (reStart) {file.setWroteSize(logger.getWroteSize()); } // 分配線程下載 dispatcher(reStart); // 循環(huán)打印進(jìn)度 printDownloadProgress(); } catch (IOException e) { System.err.println('x 創(chuàng)建文件失敗[' + e.getMessage() + ']'); } } /** * 分配器,決定每個線程下載哪個區(qū)間的數(shù)據(jù) */ private void dispatcher(boolean reStart) { long blockSize = fileSize / threadCount; // 每個線程要下載的數(shù)據(jù)量 long lowerBound = 0, upperBound = 0; long[][] bounds = null; int threadID = 0; if (reStart) { bounds = logger.getBounds(); } for (int i = 0; i < threadCount; i++) { if (reStart) {threadID = (int)(bounds[i][0]);lowerBound = bounds[i][1];upperBound = bounds[i][2]; } else {threadID = i;lowerBound = i * blockSize;// fileSize-1 !!!!! fu.ck,找了一下午的錯upperBound = (i == threadCount - 1) ? fileSize-1 : lowerBound + blockSize; } new DownloadTask(url, lowerBound, upperBound, file, canceled, threadID).start(); } } /** * 循環(huán)打印進(jìn)度,直到下載完畢,或任務(wù)被取消 */ private void printDownloadProgress() { long downloadedSize = file.getWroteSize(); int i = 0; long lastSize = 0; // 三秒前的下載量 while (!canceled.get() && downloadedSize < fileSize) { if (i++ % 4 == 3) { // 每3秒打印一次System.out.printf('下載進(jìn)度:%.2f%%, 已下載:%.2fMB,當(dāng)前速度:%.2fMB/sn', downloadedSize / (double)fileSize * 100 , downloadedSize / 1024.0 / 1024, (downloadedSize - lastSize) / 1024.0 / 1024 / 3);lastSize = downloadedSize;i = 0; } try {Thread.sleep(1000); } catch (InterruptedException ignore) {} downloadedSize = file.getWroteSize(); } file.close(); if (canceled.get()) { try {Files.delete(Path.of(storageLocation)); } catch (IOException ignore) { } System.err.println('x 下載失敗,任務(wù)已取消'); } else { System.out.println('* 下載成功,本次用時'+ (System.currentTimeMillis() - beginTime) / 1000 +'秒'); } } /** * @return 要下載的文件的尺寸 */ private long getFileSize() { if (fileSize != 0) { return fileSize; } HttpURLConnection conn = null; try { conn = (HttpURLConnection)new URL(url).openConnection(); conn.setConnectTimeout(3000); conn.setRequestMethod('HEAD'); conn.connect(); System.out.println('* 連接服務(wù)器成功'); } catch (MalformedURLException e) { throw new RuntimeException('URL錯誤'); } catch (IOException e) { System.err.println('x 連接服務(wù)器失敗['+ e.getMessage() +']'); return -1; } return conn.getContentLengthLong(); } public static void main(String[] args) throws IOException { new Downloader('http://js.xiazaicc.com//down2/ucliulanqi_downcc.zip').start(); }}

DownloadTask.java

package downloader; import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.nio.ByteBuffer;import java.nio.channels.Channels;import java.nio.channels.ReadableByteChannel;import java.util.concurrent.atomic.AtomicBoolean; class DownloadTask extends Thread { private final String url; private long lowerBound; // 下載的文件區(qū)間 private long upperBound; private AtomicBoolean canceled; private DownloadFile downloadFile; private int threadId; DownloadTask(String url, long lowerBound, long upperBound, DownloadFile downloadFile, AtomicBoolean canceled, int threadID) { this.url = url; this.lowerBound = lowerBound; this.upperBound = upperBound; this.canceled = canceled; this.downloadFile = downloadFile; this.threadId = threadID; } @Override public void run() { ReadableByteChannel input = null; try { ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024 * 2); // 2MB input = connect(); System.out.println('* [線程' + threadId + ']連接成功,開始下載...'); int len; while (!canceled.get() && lowerBound <= upperBound) {buffer.clear();len = input.read(buffer);downloadFile.write(lowerBound, buffer, threadId, upperBound);lowerBound += len; } if (!canceled.get()) {System.out.println('* [線程' + threadId + ']下載完成' + ': ' + lowerBound + '-' + upperBound); } } catch (IOException e) { canceled.set(true); System.err.println('x [線程' + threadId + ']遇到錯誤[' + e.getMessage() + '],結(jié)束下載'); } finally { if (input != null) {try { input.close();} catch (IOException e) { e.printStackTrace();} } } } /** * 連接WEB服務(wù)器,并返回一個數(shù)據(jù)通道 * @return 返回通道 * @throws IOException 網(wǎng)絡(luò)連接錯誤 */ private ReadableByteChannel connect() throws IOException { HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); conn.setConnectTimeout(3000); conn.setRequestMethod('GET'); conn.setRequestProperty('Range', 'bytes=' + lowerBound + '-' + upperBound);// System.out.println('thread_'+ threadId +': ' + lowerBound + '-' + upperBound); conn.connect(); int statusCode = conn.getResponseCode(); if (HttpURLConnection.HTTP_PARTIAL != statusCode) { conn.disconnect(); throw new IOException('狀態(tài)碼錯誤:' + statusCode); } return Channels.newChannel(conn.getInputStream()); }}

DownloadFile.java

package downloader; import java.io.IOException;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.util.concurrent.atomic.AtomicLong; class DownloadFile { private final RandomAccessFile file; private final FileChannel channel; // 線程安全類 private AtomicLong wroteSize; // 已寫入的長度 private Logger logger; DownloadFile(String fileName, long fileSize, Logger logger) throws IOException { this.wroteSize = new AtomicLong(0); this.logger = logger; this.file = new RandomAccessFile(fileName, 'rw'); file.setLength(fileSize); channel = file.getChannel(); } /** * 寫數(shù)據(jù) * @param offset 寫偏移量 * @param buffer 數(shù)據(jù) * @throws IOException 寫數(shù)據(jù)出現(xiàn)異常 */ void write(long offset, ByteBuffer buffer, int threadID, long upperBound) throws IOException { buffer.flip(); int length = buffer.limit(); while (buffer.hasRemaining()) { channel.write(buffer, offset); } wroteSize.addAndGet(length); logger.updateLog(threadID, length, offset + length, upperBound); // 更新日志 } /** * @return 已經(jīng)下載的數(shù)據(jù)量,為了知道何時結(jié)束整個任務(wù),以及統(tǒng)計信息 */ long getWroteSize() { return wroteSize.get(); } // 繼續(xù)下載時調(diào)用 void setWroteSize(long wroteSize) { this.wroteSize.set(wroteSize); } void close() { try { file.close(); } catch (IOException e) { e.printStackTrace(); } }}

Logger.java

package downloader; import java.io.*;import java.util.Properties; class Logger { private String logFileName; // 下載的文件的名字 private Properties log; /** * 重新開始下載時,使用該構(gòu)造函數(shù) * @param logFileName */ Logger(String logFileName) { this.logFileName = logFileName; log = new Properties(); FileInputStream fin = null; try { log.load(new FileInputStream(logFileName)); } catch (IOException ignore) { } finally { try {fin.close(); } catch (Exception ignore) {} } } Logger(String logFileName, String url, int threadCount) { this.logFileName = logFileName; this.log = new Properties(); log.put('url', url); log.put('wroteSize', '0'); log.put('threadCount', String.valueOf(threadCount)); for (int i = 0; i < threadCount; i++) { log.put('thread_' + i, '0-0'); } } synchronized void updateLog(int threadID, long length, long lowerBound, long upperBound) { log.put('thread_'+threadID, lowerBound + '-' + upperBound); log.put('wroteSize', String.valueOf(length + Long.parseLong(log.getProperty('wroteSize')))); FileOutputStream file = null; try { file = new FileOutputStream(logFileName); // 每次寫時都清空文件 log.store(file, null); } catch (IOException e) { e.printStackTrace(); } finally { if (file != null) {try { file.close();} catch (IOException e) { e.printStackTrace();} } } } /** * 獲取區(qū)間信息 * ret[i][0] = threadID, ret[i][1] = lowerBoundID, ret[i][2] = upperBoundID * @return */ long[][] getBounds() { long[][] bounds = new long[Integer.parseInt(log.get('threadCount').toString())][3]; int[] index = {0}; log.forEach((k, v) -> { String key = k.toString(); if (key.startsWith('thread_')) {String[] interval = v.toString().split('-');bounds[index[0]][0] = Long.parseLong(key.substring(key.indexOf('_') + 1));bounds[index[0]][1] = Long.parseLong(interval[0]);bounds[index[0]++][2] = Long.parseLong(interval[1]); } }); return bounds; } long getWroteSize() { return Long.parseLong(log.getProperty('wroteSize')); }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 四虎影视在线影院在线观看免费视频 | 国产美女裸体无遮挡免费视频 | 在线视频午夜 | 春色激情站 | 国产精品一区一区三区 | 天天操综合| 国产91在线播放9色不卡 | 久久天天躁夜夜躁狠狠i女人 | 最新国产三级 | 午夜无码一区二区三区在线观看 | 国产极品美女高潮无套 | 日韩激情国产 | 免费又黄又爽又猛的毛片 | 在线欧美| 未满十八18禁止午夜免费网站 | 天堂a区 | 亚洲国产精品久久久久久女王 | 国产成人一区二区三区在线观看 | 国产特级毛片aaaaaaa高清 | 欧美又大粗又爽又黄大片视频 | 天天干在线播放 | 免费观看全黄做爰大片国产 | 快色av | 99国产精品久久久久久久夜 | av三级毛片| 四虎网站在线播放 | а√天堂中文在线资源8 | 免费日批网站 | 91精品综合久久久久久五月天 | 最新国产拍偷乱偷精品 | 亚洲xxxx做受欧美 | 什么网站可以看毛片 | 在线观看欧美一区 | 67194少妇在线观看 | 女儿的朋友4在线观看 | 国产精品一区二区在线看 | 日韩精品免费在线视频 | 久精品国产欧美亚洲色aⅴ大片 | 国产老妇伦国产熟女老妇视频 | 91大神久久 | 青青草社区| ⅹⅹⅹ黄色片视频 | 玩弄japan白嫩少妇hd小说 | 国内精品久久久久久久久电影网 | 熟妇激情内射com | 久久精品一本到东京热 | 精品国产一区二区三区四区五区 | 东京热无码av一区二区 | 99免费国产| aaa日韩| 成人做爰100部片免费看网站 | jizz日本女人 | xxx国产精品午xxx | 国产一级内谢一级一内高请 | 国产精品久免费的黄网站 | 最新久久久 | 欧美精品久久久久久久久免 | 99国产精品丝袜久久久久久 | 成人性色视频 | 香蕉大久久| a天堂视频在线 | 日本一卡2卡3卡4卡无卡免费网站 | 不卡的在线视频 | 网站久久久 | 一卡二卡三卡在线观看 | 亚洲成网站 | 国产一区二区毛片 | 四虎成人精品国产永久免费无码 | 日本国产一区二区 | 一级特黄妇女高潮2 | 精品免费国产一区二区 | 337p日本欧洲亚洲大胆色噜噜 | 国产精品一区二区三区四区五区 | 国产精品毛片久久 | 精品国产乱码一区二区三区 | 黄色网战大全 | 999久久久国产999久久久 | 中文字幕97 | 蜜臀aⅴ精品一区二区三区 蜜臀aⅴ一区二区三区 | 亚洲无吗在线观看 | 日产精致一致六区麻豆 | 波多野结衣av在线播放 | 国产精品久久久一区二区三区 | 国产莉萝无码av在线播放 | 欧美乱大交xxxxx | 性感av在线| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 2019中文字幕在线 | 成人做爰66片免费看网站 | 久热久 | 亚洲欧美网站 | 日本a√在线观看 | 国产黄色大片视频 | 精品av无码国产一区二区 | 欧美成人免费在线观看 | 操操日日 | 亚洲一一在线 | 亚洲综合一二三 | 日日躁你夜夜躁你av蜜 | 欲求不满 希岛あいり在线看 | 亚洲精品国产av成拍色拍 | 激情综合五月天 | 麻豆91茄子在线观看 | 美女黄色免费网站 | 思热99re视热频这里只精品 | 成人午夜视频免费在线观看 | 中文国产成人精品久久不卡 | 国产视频国产区 | 91网址在线播放 | 免费毛片网站 | 91在线免费视频 | 久久精品日本啪啪涩涩 | 成人激情免费视频 | 日本动漫做毛片一区二区 | 亚洲tv在线观看 | 黄a大片 | 亚洲码与欧洲码一二三四区 | 亚洲国产精品高潮呻吟久久 | 深夜视频在线观看 | 爱插美女网| 国产女同无遮挡互慰高潮91 | 国产免费精彩视频 | 69亚洲| 中文有码在线 | 在线日本看片免费人成视久网 | 亚洲区一区二区三区 | 美女裸体跪姿扒开屁股无内裤 | 男女超碰 | 91丨porny丨尤物| 国产精品欧美一区二区三区 | 国产做爰免费观看视频 | 国产成人无码a区视频在线观看 | 成人av在线网址 | 男女啪啪免费视频网站 | 久久精品国产亚洲a | 五月婷婷综合在线观看 | 国产真人性做爰久久网站 | 极品尤物在线观看 | 久久影院精品 | 中文在线好最新版在线 | 亚洲色大网站www永久网站 | www.国产二区 | 美女黄色真播 | 欧美中文字幕一区二区三区 | 91精品国产一区二区在线观看 | 波多野结衣视频播放 | 围产精品久久久久久久 | 国产一级二级日本在线 | 胖女人毛片 | 少妇人妻偷人精品无码视频新浪 | 春色伊人| 亚洲va久久久噜噜噜久久狠狠 | 日本三级全黄 | 免费a级片视频 | 揉少妇高挺双乳 | 国产91亚洲 | 欧美日视频 | 苍井空张开腿实干12次 | 四虎新网址 | 狠狠躁夜夜躁人人爽蜜桃 | 欧美黑大粗 | 久久久久久欧美六区 | 天天躁夜夜躁很很躁麻豆 | 国产伦理片在线观看 | 少妇饥渴放荡91麻豆 | 欧美成人午夜精品免费 | 成人在线高清 | 正在播放超嫩在线播放 | 一区二区三区精品 | 中文字幕亚洲图片 | 亚洲 自拍 另类小说综合图区 | 亚洲精品大全 | 久草在线在线精品观看 | 一本色道久久99精品综合蜜臀 | 岛国av在线播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产黄色片网站 | 99视频一区 | 久久国产精品久久久久久 | 成人污污视频 | 午夜欧美成人 | 成人毛片一级 | 性欧美在线视频观看 | 国产精品无码一区二区桃花视频 | 午夜日韩在线 | 99精品国产免费 | 一本大道伊人av久久乱码 | 国产精品无码无卡无需播放器 | 国产午夜精品一区二区三区不卡 | 亚洲国产成人精品久久久国产成人 | 99久久综合狠狠综合久久aⅴ | 乱h伦h女h在线视频 乱lun合集小可的奶水 | 亚洲精品成人av在线 | 少妇厨房愉情理伦bd在线观看 | 久久亚洲激情 | 领导边摸边吃奶边做爽在线观看 | 日韩中文字幕综合 | 日本一本久草 | 久久最新免费视频 | 超级碰在线观看 | 网曝91综合精品门事件在线 | 久久久久久亚洲精品中文字幕 | 国产精品裸体瑜伽视频 | 新x8x8拨牐拨牐永久免费影库 | 欧美成人tv | 日韩欧美手机在线 | 久久尤物视频 | 国产精品久久久久久久久福交 | 无码人妻精品一区二区蜜桃百度 | 日日摸夜夜摸狠狠摸婷婷 | 婷婷情更久日本久久久片 | 制服丨自拍丨欧美丨动漫丨 | 国产色视频| 91亚洲精品久久久中文字幕 | 狠狠做五月深爱婷婷 | 人妻中文无码久热丝袜 | 免费视频精品 | 九九国产视频 | 黑白配高清在线观看免费版中文 | 亚洲在线一区二区三区 | 欧美人做人爱a全程免费 | 加勒比在线一区 | 免费三级黄 | a级a级高清免费美日a级大片 | 久草一级片 | 三级黄色av | 做爰猛烈叫床91 | 成人羞羞视频播放网站 | 中文字幕一区二区三区在线乱码 | 杨幂毛片| 久草在线观看福利 | 午夜dj在线观看免费视频 | 成人无码av一区二区 | 波多野结衣亚洲一区二区 | 亚洲色大成网站www永久 | 18视频在线观看网站 | 午夜男人的天堂 | 成人小视频免费 | 欧美精产国品一二三区69堂 | 性av+色av| 中文字幕在线无码一区二区三区 | 欧美日韩一区二 | 精品区一区二区 | 国产精品自在自线视频 | 粉嫩少妇内射浓精videos | 亚洲成a人v欧美综合天堂麻豆 | 天堂8中文在线最新版在线 拍真实国产伦偷精品 | 午夜影院入口 | 午夜不卡av免费 | 国产一区二区黑人欧美xxxx | www.亚洲视频.com | 成人国产欧美大片一区 | chinese少妇国语对白 | 国产视频一区二区三区四区五区 | 中文字幕免费 | 一级片黄色的 | 国产精品自产拍在线观看55亚洲 | 4444亚洲人成无码网在线观看 | 亚洲一区二区三区乱码aⅴ蜜桃女 | 天堂8在线天堂资源bt | 国产精品揄拍一区二区久久国内亚洲精 | 136fldh福利微拍acg | 男人猛吃奶女人爽视频 | 国产精品第72页 | 国产乱子夫妻xx黑人xyx真爽 | 黄色片视频免费看 | 亚洲va在线va天堂xx xx | 亚洲色婷婷一区二区三区 | 成人免费乱码大片a毛片软件 | www.天天色| 91精品无人区麻豆 | 久热中文字幕无码视频 | 日本边添边摸免费视频网站 | 国产一区二区三区影院 | 91免费黄视频 | 最近免费中文字幕大全免费版视频 | 好色成人网 | 亚洲日韩av无码一区二区三区 | 亚洲 日本 欧美 中文幕 | 日韩三级中文 | 免费视频爱爱太爽了 | 精品欧美乱码久久久久久1区2区 | 亚洲中文字幕精品一区二区三区 | jizz一区二区三区 | 欧美色图一区二区 | 中韩无矿砖专区综合 | 精品一区二区三区毛片 | 中文字幕97 | 国产视频精选 | 十八18禁国产精品www | 欧美在线小视频 | 欧亚一区二区三区 | 亚洲精品乱码久久久久红杏 | 极品少妇xxxx精品少妇偷拍 | 国产情趣视频 | 日本欧美视频在线观看 | 少妇特黄v一区二区三区图片 | 国产剧情av引诱维修工 | 韩国一级黄色毛片 | 天堂视频免费在线观看 | 99精品国产兔费观看久久99 | 黄色av免费网址 | 在线观看视频国产 | 久久国产色av免费看 | 成年人一级黄色片 | 51综合区亚洲线观看 | 久久香蕉精品视频 | 国产女人爽到高潮免费视频 | 久久国产精品萌白酱免费 | 狠狠躁夜夜躁人人爽天天5 中国china露脸自拍性hd | 日韩和的一区二区 | 中文字幕免费在线播放 | 国产情侣作爱视频免费观看 | 欧洲成人午夜免费大片 | 日本少妇被黑人猛cao | 色婷婷香蕉在线 | 美女131爽爽爽做爰视频 | 天天射日日 | 日本捏奶吃奶的视频 | 久久精品国产99国产 | 婷婷狠狠久久久一本精品 | 日本黄色片在线播放 | 久久久久久久岛国免费网站 | 国产一级黄色片子 | 国产精品久久久 | 琪琪色av | 亚洲乱亚洲乱妇50p 亚洲va中文字幕无码久久不卡 | 清清草免费视频 | 大尺度做爰黄9996片视频 | 色婷婷综合久色aⅴ五区最新 | 欧美日韩亚洲国产精品 | 亚洲成人av中文字幕 | 成年人网站在线观看视频 | 116少妇做爰毛片 | 免费人成无码大片在线观看 | 亚洲自拍偷拍视频 | 亚洲v在线| 日韩人妻无码精品久久久不卡 | 国产精品毛多多水多 | 免费成人在线播放 | 亚洲一区二区三区四区五区午夜 | 亚洲精品无码高潮喷水在线 | 极品美女扒开粉嫩小泬图片 | 少妇大尺度裸体做爰原声 | 妇女bbbbb撒尿正面视频 | 一及黄色大片 | 性生活免费网站 | 国产亚洲午夜高清国产拍精品 | 国产一级黄色av | 日韩福利影院 | 国产精品久久av一区二区三区 | 婷婷四月开心色房播播网 | 成人性生交大片免费看视 | www亚洲一区二区 | 日韩高清不卡在线 | 在线青草 | 日韩欧美高清dvd碟片 | 久久九九爱 | 成长快手短视频在线观看 | 久久久久99精品成人片直播 | 日韩欧美的一区二区 | 午夜福利1000集在线观看 | 蜜桃国精产品二三三区视频 | 成人免费ā片在线观看 | 大尺度做爰呻吟62集 | 99久久婷婷国产综合亚洲 | 无码精品黑人一区二区三区 | 在线播放免费播放av片 | 一本色道久久综合亚洲二区三区 | 99在线精品视频免费观看20 | 成人福利视频网 | 大香伊在人线免97 | 国产亚洲精品久久久久婷婷瑜伽 | a级成色和s级成色视频 | 岛国精品在线播放 | 国产无套粉嫩白浆在线观看 | av免费网站| 尤物网站在线观看 | 北条麻妃在线一区二区 | 国产交换配乱淫视频a免费 国产精成人品免费观看 | 97国产真实伦对白精彩视频8 | 北岛玲一区二区 | 婷婷丁香视频 | 人人草人人插 | 亚洲第一天堂久久 | 少妇高潮a一级 | 国产三级在线免费观看 | 中文字幕乱轮 | 亚洲网视频 | 无码人妻丰满熟妇精品区 | 亚洲在av人极品无码网站 | 中文字幕乱码亚洲精品一区 | 伊人久久网站 | 黑人videos3d极品另类 | 91一级视频| 国产亚洲精久久久久久无码 | 高潮久久久久久久久 | 毛片a久久99亚洲欧美毛片 | 精品一区二区三区四区五区六区 | 国产农村妇女毛片精品久久麻豆 | 在线人成视频播放午夜福利 | 欧美大片网址 | 长篇乱肉合集乱500小说日本 | 女人裸体性做爰视频 | 久久99视频 | av导航网| 亚洲第一在线综合网站 | 亚洲精品无码专区在线 | 亚洲国产无线乱码在线观看 | 成人无码www在线看免费 | 1024精品一区二区三区日韩 | 黄色小网站在线观看 | 国产美女永久无遮挡 | 中文字幕av一区中文字幕天堂 | 国产亚洲精品久久久久久久久久久久 | 中国精品久久 | 日本在线视频一区 | 人妻体体内射精一区二区 | 国产精品自拍第一页 | 日韩黄色大全 | 成人深夜小视频 | 欧美交性又色又爽又黄 | 精品久久久久久一区二区 | 一区二区三区四区产品乱 | 亚洲aa在线 | 国产精品1688网站 | 丰满亚洲大尺度无码无码专线 | 麻豆视频国产精品 | 天天看国91产在线精品福利桃色 | 国产av熟女一区二区三区 | 国产精品伦视频看免费三 | 黄在线免费 | 午夜三级做爰视频在线看 | 国产区久久 | 国产日韩视频在线 | 一级黄色网址 | 日本猛少妇色xxxxx猛叫小说 | 91福利区 | 欧美一区二区在线 | 性色做爰片在线观看ww | 成人性生交天码免费看 | 少妇啪啪姿势不断呻吟av | 菲律宾黄色片 | av高清尿小便嘘嘘 | 公的~yin之手筱田优中文字幕 | 久久国产精品亚洲 | 日韩视频无码中字免费观 | 婷婷九月丁香 | 久久中文字幕视频 | 性欧美videos高清精品 | 久久加勒比亚洲精品一区 | a级片一级片| 91在线超碰 | 欧美在线三区 | 亚洲色无码播放 | 黄色一级视频免费看 | 欧美一乱一交一性ed2k | 超高清日韩aⅴ大片美女图片 | 国产无套粉嫩白浆内谢在线 | 在线久操| 91偷拍一区二区三区精品 | 欧美性动态图 | 亚洲欧美日韩综合在线 | 免费国精产品—品二品 | 搡老女人一区二区三区视频tv | 成人av中文解说水果派 | 亚洲 欧美 中文字幕 | 亚洲第一黄色 | 久草网视频| 精品无码中文字幕在线 | 国产偷国产偷亚洲清高网站 | 免费观看又色又爽又黄动态 | 亚洲人成网亚洲欧洲无码 | 久久久久夜 | 国产精品高潮呻吟av久久动漫 | 成人福利网 | 久久大奶 | 日韩成人在线免费观看 | 人妻少妇-嫩草影院 | 亚洲成肉网 | 六月丁香激情 | 欧美日韩伊人 | 国产黄色在线播放 | aaaaa少妇高潮大片在按摩线 | 久久精品香蕉视频 | 女人被男人躁得好爽免费视频 | 日韩美女毛片 | www.久久久久久久久 | 日韩美女啪啪 | 日日干天天操 | 4444亚洲人成无码网在线观看 | 成年男女免费视频网站 | 亚洲性喷水| 96精品视频 | 国产精品久久久久久久久久久久午夜片 | 在线理论片| 91亚洲狠狠婷婷综合久久久 | 国产乱子伦精品无码专区 | 含紧一点h边做边走动免费视频 | 狠狠色网站 | 欧美日韩一区二区三区在线观看视频 | 国产xxxx99真实实拍 | 精品国产一区二区三区粉芽 | 一本一本久久a久久精品综合小说 | 日韩av激情在线观看 | 香港一级淫片a级在线 | 国产欧美一区二区三区视频在线观看 | 少妇性l交大片毛多 | 一边捏奶头一边高潮视频 | 好吊妞视频在线 | 色一情一乱一乱一区91av | 超碰2019| 欧美午夜小视频 | 国产模特av私拍大尺度 | 国产色视频免费 | 91免费官网 | 丁香久久性网 | 97香蕉久久超级碰碰高清版 | 天天影视色香欲综合久久 | 中文在线好最新版在线 | 综合国产视频 | 四虎国产成人永久精品免费 | 欧美精品一区二区三区蜜臀 | 日本一级二级三级久久久 | 四川骚妇无套内射舔了更爽 | 中文字幕国产亚洲 | 把jiji进美女的屁屁里视频 | 少妇又紧又深又湿又爽视频 | 黄色影院国产 | 国产精品99久久久久久宅男 | 一区二区视频在线免费观看 | 伊人久久大香线焦av综合影院 | 免费色网址 | 欧美aa一级片 | 黄色av网址大全 | 国产精品一区二区三区四区 | 91丨porny丨在线中文 | 国内露脸少妇精品视频 | 天天爽夜夜爽人人爽曰 | 日韩精品第一区 | 久久男女视频 | 日韩欧美在线观看一区 | 在线国精产品 | 成人性生交大片免费看视频app | 亚洲国产日韩精品一区二区三区 | 国产精品麻豆入口 | 人人玩人人添人人澡欧美 | 久久久久久久精 | 毛片一毛片二毛片三国产片 | 蜜桃成熟时李丽珍在线观看 | 九色丨蝌蚪丨成人 | 国产一级黄色影片 | 人妻精品国产一区二区 | 午夜不卡av免费 | 欧美白嫩嫩hd4kav | 射精专区一区二区朝鲜 | 亚洲精品中文字幕乱码三区 | 国产精品爽爽久久久久久 | 亚洲成在人线在线播放 | 欧美激情伊人 | 九九综合va免费看 | 国产精品视频一区二区三区四区国 | 一二三不卡视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 午夜www| 亚洲乱码国产乱码精品精剪 | 美女一区二区三区四区 | 性a视频 | 免费黄色一级大片 | 一级h片| 国产色视频一区二区三区qq号 | 一本一本久久a久久精品综合妖精 | 国产伦精品一区二区三区免费 | 色婷婷综合久久久久中文字幕 | 亡は夫の上司中文字幕 | 国产人妻精品午夜福利免费 | 男女猛烈激情xx00免费视频 | 中文视频在线 | 久操热线 | 在线观看免费视频一区 | 久久午夜网站 | 国产又黄又猛又爽 | 国产露脸系列magnet | 国产ts人妖调教重口男 | 欧美三级乱人伦电影 | 韩国三级中文字幕hd久久精品 | 久产久精国产品 | 性色生活片 | 一本一道久久 | 日韩精品免费在线观看 | 波多野结衣乳喷高潮视频 | 国产精品xxx在线观看 | www99在线观看 | 天堂视频在线 | 黑人巨茎大战欧美白妇 | 九七视频在线 | 伊人久久大 | 国产一区亚洲二区 | 成年人黄色在线观看 | 51真实女性私密spa按摩偷拍 | 亚洲色偷偷色噜噜狠狠99网 | 深夜福利一区二区三区 | 久久精品一区二 | 手机看片1024国产 | 天天做天天爱天天做 | 蜜桃视频在线观看免费视频网站www | 国产无套精品一区二区三区 | 国产一区二区三区四区五区精品 | 久久久久久久美女 | 国产不卡一区二区视频 | 久久超 | 久久女性裸体无遮挡啪啪 | 国产韩国精品一区二区三区久久 | 国产尤物视频在线观看 | 看免费黄色一级片 |