成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

Java多線程文件分片下載實現的示例代碼

瀏覽:148日期:2022-09-04 18:54:27

多線程下載介紹

多線程下載技術是很常見的一種下載方案,這種方式充分利用了多線程的優勢,在同一時間段內通過多個線程發起下載請求,將需要下載的數據分割成多個部分,每一個線程只負責下載其中一個部分,然后將下載后的數據組裝成完整的數據文件,這樣便大大加快了下載效率。常見的下載器,迅雷,QQ旋風等都采用了這種技術。

分片下載

所謂分片下載就是要利用多線程的優勢,將要下載的文件一塊一塊的分配到各個線程中去下載,這樣就極大的提高了下載速度。

技術難點

并不能說是什么難點,只能說沒接觸過不知道罷了。

1、如何請求才能拿到數據的特定部分,而非全部?

可以在HTTP請求頭中加入Range來標識數據的請求范圍/區間,從HTTP/1.1開始可用。

基本用法:

Range: bytes=10-:取第10個字節及后所有數據。

Range: bytes=40-100:取第40個字節到第100個字節之間的數據。

這樣我們就能拿到特定部分的數據了,斷點續傳也可以用這個來實現。

PS:0為開始點。

2、分片后某線程下載時如何寫出?

思路1:等所有下載完成后進行統一匯總整理然后再一次性寫出。

這簡直是最笨的思路了,如果文件過大全部拉到內存中,豈不涼涼。

思路2:下載采用多線程,寫出時采取數據前后順序排隊寫出。

也就是說多線程下載,單線程輸出,某種程度解決了內存占用問題,不過效率基本不理想。

思路3:要說還是API香,老大哥Java給我們提供了一個類叫做RandomAccessFile。

這個類可以進行隨機文件讀寫,其中有一個seek函數,可以將指針指向任意位置,然后進行讀寫。什么意思呢,舉個栗子:假如我們開了30個線程,首先第一個下載完成的是線程X,它下載的數據范圍是4000-9000,那么這時我們調用seek函數將指針撥動到4000,然后調用它的write函數將byte寫出,這時4000之前都是NULL,4000之后就是我們插入的數據。這樣就可以實現多線程下載和本地寫入了。

具體實現

一個分片下載類,我們需要創建多個對象來進行下載。

public class UnitDownloader implements Runnable { private int from; private int to; private File target; private String uri; private int id; public UnitDownloader(int from, int to, File target, String uri, int id) { this.from = from; this.to = to; this.target = target; this.uri = uri; this.id = id; } public int getFrom() { return from; } public int getTo() { return to; } @Override public void run() { //download and save data try { HttpURLConnection connection = (HttpURLConnection) new URL(uri).openConnection(); connection.setRequestProperty('Range', 'bytes=' + from + '-' + to); connection.connect(); int totalSize = connection.getContentLength(); InputStream inputStream = connection.getInputStream(); RandomAccessFile randomAccessFile = new RandomAccessFile(target, 'rw'); randomAccessFile.seek(from); byte[] buffer = new byte[1024 * 1024]; int readCount = inputStream.read(buffer, 0, buffer.length); while (readCount > 0) {totalSize -= readCount;System.out.println('分片:' + this.id + '的剩余:' + totalSize);randomAccessFile.write(buffer, 0, readCount);readCount = inputStream.read(buffer, 0, buffer.length); } inputStream.close(); randomAccessFile.close(); } catch (IOException e) { e.printStackTrace(); } }}

分片下載管理器,主要就是拿到內容的總大小,將其分配給每一個UnitDownloader。這里的threadCount函數可以再考慮優化一下。

public class MultipleThreadDownloadManager implements Runnable { private String uri; private File target; public MultipleThreadDownloadManager(String uri, File target) { this.target = target; this.uri = uri; if (target.exists() == false) { try {target.createNewFile(); } catch (IOException e) {e.printStackTrace(); } } } /** * 開始下載 */ public void start() { new Thread(this).start(); } /** * 根據文件總大小計算線程數量 * * @param totalSize * @return */ public int threadCount(int totalSize) { if (totalSize < 30 * 2014 * 1024) { return 1; } return 30; } @Override public void run() { //獲取文件總大小 int totalSize = 0; try { HttpURLConnection connection = (HttpURLConnection) new URL(uri).openConnection(); connection.connect(); int contentLength = connection.getContentLength(); totalSize = contentLength; } catch (IOException e) { e.printStackTrace(); } //將文件分片并分開下載 int threadCount = threadCount(totalSize); int perThreadSize = totalSize / threadCount;//每一個線程分到的任務下載量 int id = 0; int from = 0, to = 0; while (totalSize > 0) { id++; //計算分片 if (totalSize < perThreadSize) {from = 0;to = totalSize; } else {from = totalSize;to = from + perThreadSize; } //開始下載 UnitDownloader downloader = new UnitDownloader(from, to, target, uri, id); new Thread(downloader).start(); } }}

參考文獻

1、https://emacsist.github.io/2015/12/29/http-%E5%8D%8F%E8%AE%AE%E4%B8%AD%E7%9A%84range%E8%AF%B7%E6%B1%82%E5%A4%B4%E4%BE%8B%E5%AD%90/

2、https://blog.csdn.net/lyt_7cs1dn9/article/details/75105266

到此這篇關于Java多線程文件分片下載實現的示例代碼的文章就介紹到這了,更多相關Java多線程分片下載內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久色成人在线| 成人小视频免费在线观看| 国产99久久久久| 在线中文字幕一区二区| 五月天网站亚洲| 国产欧美日韩亚洲| 亚洲欧美区自拍先锋| 91网站视频在线观看| 26uuu亚洲| 99久久精品国产观看| 亚洲精品在线免费观看视频| 懂色av噜噜一区二区三区av| 91精品久久久久久久久99蜜臂| 精品亚洲免费视频| 午夜亚洲性色视频| 亚洲大片免费看| 老司机精品导航| 久久国产综合精品| 欧美福利一区二区| 国产.精品.日韩.另类.中文.在线.播放 | 国产精品99久久不卡二区| 欧美喷水一区二区| 国模一区二区三区白浆| 欧美电影在线免费观看| 国产美女精品一区二区三区| 欧美一级在线免费| 本田岬高潮一区二区三区| 2024国产精品| 国产一区二区三区自拍| 亚洲欧美日本在线| 国产欧美一区二区三区另类精品| 夜夜操天天操亚洲| 色偷偷久久一区二区三区| 热久久一区二区| 欧美剧在线免费观看网站| 国产成人综合亚洲网站| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美一区国产在线| 日本一区二区免费在线观看视频| 色综合久久中文综合久久牛| 亚洲国产精品高清| 在线亚洲一区| 人人狠狠综合久久亚洲| 91精品国产综合久久久久久 | 972aa.com艺术欧美| 久久精品一区四区| 在线成人欧美| 午夜欧美2019年伦理| 欧美日韩一区二区三区四区 | 欧美性xxxxxx少妇| 国产一区二区调教| 欧美精品一区二区三区蜜桃视频| 欧美日韩一视频区二区| 一区二区三区91| 在线中文字幕一区| 国产很黄免费观看久久| 久久精品在线观看| 国产日韩一区二区| 蜜臀a∨国产成人精品| 日韩三级伦理片妻子的秘密按摩| 女同一区二区| 亚洲在线中文字幕| 69av一区二区三区| 欧美二区在线| 日韩影视精彩在线| 日韩一区二区三区在线视频| 欧美日韩国产综合在线| 午夜在线成人av| 欧美丰满一区二区免费视频| 91亚洲精华国产精华精华液| 一区二区欧美国产| 69堂国产成人免费视频| 伊人蜜桃色噜噜激情综合| 蜜桃免费网站一区二区三区| 久久久久久久网| 亚洲一区二区精品在线| 国产一区二区免费看| 国产精品麻豆视频| 久久综合九色综合久99| 成人午夜激情视频| 伊人性伊人情综合网| 欧美一区日本一区韩国一区| 伊人成人在线| 国内久久精品视频| |精品福利一区二区三区| 在线精品视频免费观看| 99国产精品国产精品久久| 亚洲成人777| 久久久亚洲国产美女国产盗摄| 久久精品中文字幕一区二区三区| 成人av网在线| 亚洲成av人影院在线观看网| 日韩美女在线视频| 国产一区二区高清视频| 成人久久久精品乱码一区二区三区| 一区二区视频在线| 日韩欧美一区中文| 国产精品免费一区二区三区观看| 岛国一区二区三区| 亚洲成人三级小说| 精品国产乱码久久久久久蜜臀| 久久精品91| 色综合久久中文综合久久牛| 日韩国产欧美视频| 国产欧美精品在线观看| 精品视频一区 二区 三区| 狠狠色伊人亚洲综合网站色| 国产一区三区三区| 亚洲黄一区二区三区| 精品捆绑美女sm三区| 久久久久久久久久久一区 | 777亚洲妇女| aa日韩免费精品视频一| 成人app网站| 日韩—二三区免费观看av| 国产精品久久久爽爽爽麻豆色哟哟 | 91免费视频网址| 日韩国产欧美在线视频| 国产精品久久夜| 日韩天堂在线观看| 欧美探花视频资源| 国产一区二区高清| 国产一区日韩欧美| aaa亚洲精品一二三区| 久久精品国产精品亚洲红杏| 亚洲免费观看高清完整版在线| 精品久久久久久亚洲综合网| 日本韩国欧美三级| 99视频一区| 色综合色狠狠天天综合色| 国产一区激情在线| 天堂成人免费av电影一区| 中文字幕 久热精品 视频在线| 欧美一级黄色大片| 欧美在线一二三四区| 亚洲一区三区电影在线观看| 欧美精品一卡| 成人av网站免费观看| 国内精品伊人久久久久av一坑 | 色综合天天视频在线观看 | 91网站最新地址| 国产麻豆视频精品| 免费在线看一区| 五月天亚洲婷婷| 亚洲高清免费一级二级三级| 中文字幕中文字幕在线一区| 欧美电影免费观看高清完整版在线| 欧美体内she精高潮| 久久久一本精品99久久精品66| 欧美视频在线观看| 欧美777四色影| jlzzjlzz欧美大全| 高清国产午夜精品久久久久久| 精品一区二区三区视频| 日本不卡在线视频| 亚洲gay无套男同| 亚洲美女视频在线| 中文字幕一区二区三区蜜月| 国产三级一区二区三区| 精品国产免费人成在线观看| 91精品免费在线| 欧美美女激情18p| 欧美在线制服丝袜| 欧美视频一区二| 欧美亚洲综合在线| 在线影视一区二区三区| 色偷偷久久一区二区三区| 久久久成人网| 日本精品视频一区二区三区| 色偷偷久久人人79超碰人人澡| 久久精品人人| 性娇小13――14欧美| 噜噜噜噜噜久久久久久91| 免费欧美日韩| 久久国产精品久久久久久电车| 亚洲一区日本| 免费不卡亚洲欧美| 久久天天狠狠| 在线精品视频一区二区三四| 欧美自拍丝袜亚洲| 欧美三级视频在线播放| 欧美天堂亚洲电影院在线播放| 欧美视频中文字幕| 欧美男人的天堂一二区| 777精品伊人久久久久大香线蕉| 欧美精品在线一区二区| 欧美久久久久免费| 日韩无一区二区| 久久久久久久久久久久久夜| 国产视频在线观看一区二区三区| 国产午夜精品在线观看| 欧美高清在线精品一区| 国产精品国产三级国产aⅴ中文| 综合中文字幕亚洲| 亚洲影视在线播放| 日韩av网站在线观看| 国产精品99久| 欧美激情91| 一区二区毛片| 色欧美日韩亚洲|