国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

AccessRandomFile多線程下載文件

2019-11-14 15:15:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 

寫一個(gè)工具類

package com.pb.thread.demo;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomaccessFile;/** * 多線程復(fù)制文件工具類 *  * @author denny * */public class MutiCopyFileUtil {    PRivate String src;// 源文件    private String dst;// 目標(biāo)文件    private int threadSize;// 開(kāi)啟多少個(gè)線程去復(fù)制源文件    /**     * 包含3個(gè)參數(shù)的構(gòu)造方法     *      * @param src     *            源文件     * @param dst     *            目標(biāo)文件     * @param threadSize     *            開(kāi)啟多少個(gè)線程去復(fù)制源文件     */    public MutiCopyFileUtil(String src, String dst, int threadSize) {        super();        this.src = src;        this.dst = dst;        this.threadSize = threadSize;    }    /**     * 復(fù)制文件的方法     */    public void copyFile() {        File file = new File(src);// 源文件的File對(duì)象        // 獲取源文件大小字節(jié)數(shù)        long fsize = file.length();        // 計(jì)算每個(gè)線程下載的字節(jié)數(shù)        long block = fsize % threadSize == 0 ? fsize / threadSize : fsize / threadSize + 1;        // 開(kāi)啟循環(huán)調(diào)用        for (int threadId = 0; threadId < threadSize; threadId++) {            // 開(kāi)啟多個(gè)個(gè)線程來(lái)進(jìn)行文件的復(fù)制,            new DownloadThread(fsize, block, threadId).start();        }    }    /**     *      * @author denny     *     */    private class DownloadThread extends Thread {        private long fsize;// 文件大小        private long block;// 每個(gè)線程下載的字節(jié)數(shù)        private int threadId;// 線程的ID號(hào),從0開(kāi)始        private int buffSize=1024*1024; //緩沖區(qū)大小        public DownloadThread(long fsize, long block, int threadId) {            super();            this.fsize = fsize;            this.block = block;            this.threadId = threadId;        }        /**         * 重寫run方法         */        public void run() {            try {                // 隨機(jī)訪問(wèn)文件對(duì)象 聲明IO類,以只讀的模式訪問(wèn)文件                RandomAccessFile reader = new RandomAccessFile(src, "r");                // 隨機(jī)訪問(wèn)文件對(duì)象                RandomAccessFile writer = new RandomAccessFile(dst, "rw");                // 每個(gè)線程下載的啟始位置                long startPos = threadId * block;                // 確定每個(gè)線程下載的結(jié)束位置                long endPos = startPos + block > fsize ? fsize : startPos + block;                /*                 * 判斷下載的結(jié)束位置是不是比文件最大的位置還大,                  * 是的話就是文件的最大位置,                  * 不是的話就是開(kāi)始位置+要下載的字節(jié)大小                 */                                //設(shè)置游標(biāo)的位置                reader.seek(startPos);                //設(shè)置目標(biāo)文件的                writer.seek(startPos);                //設(shè)置緩沖區(qū)                byte[] buf=new byte[buffSize];                while(startPos<endPos){                    int len=0;                    //判斷是不是到結(jié)束位置                    if(startPos+buffSize<endPos){                        //讀取文件到緩沖區(qū),讀滿                        len=reader.read(buf);                                            }else{                            //把剩下的填不滿緩沖區(qū)的數(shù)據(jù)寫到緩沖區(qū)中                        len=reader.read(buf, 0, (int)(endPos-startPos));                    }                    //改變起始位置                    startPos+=len;                    /*寫入目標(biāo)文件                     * 把緩沖區(qū)的文件寫入目標(biāo)文件                    */                    writer.write(buf,0,len);                    System.out.println("線程"+(threadId+1)+"下載了:"+len);                }                reader.close();                writer.close();                System.out.println("線程"+(threadId+1)+"下載完畢");            } catch (IOException e) {                e.printStackTrace();            }        }    }}

測(cè)試類

package com.pb.thread.demo;import java.io.File;/** *  * @author denny * */public class MutiCopyFileDemo {    public static void main(String[] args) {        /*         * /home/denny/Downloads         * android-studio-ide-141.2135290-linux.zip         */        String src="/home/denny/Downloads/android-studio-ide-141.2135290-linux.zip";        String dst="/home/denny/Downloads/a.zip";        MutiCopyFileUtil mcf=new MutiCopyFileUtil(src,dst,10);        mcf.copyFile();    }}

 

結(jié)果:

線程9下載了:1048576線程6下載了:1048576線程4下載了:1048576線程3下載了:1048576線程1下載了:1048576線程8下載了:1048576線程2下載了:1048576線程5下載了:1048576線程7下載了:1048576線程10下載了:1048576線程9下載了:1048576線程1下載了:1048576線程7下載了:1048576線程3下載了:1048576線程6下載了:1048576線程4下載了:1048576線程2下載了:1048576線程10下載了:1048576線程3下載了:1048576線程8下載了:1048576線程6下載了:1048576線程5下載了:1048576線程1下載了:1048576線程4下載了:1048576線程7下載了:1048576線程9下載了:1048576線程2下載了:1048576線程4下載了:1048576線程6下載了:1048576線程8下載了:1048576線程7下載了:1048576線程9下載了:1048576線程1下載了:1048576線程2下載了:1048576線程5下載了:1048576線程3下載了:1048576線程7下載了:1048576線程10下載了:1048576線程2下載了:1048576線程5下載了:1048576線程2下載了:1048576線程9下載了:1048576線程4下載了:1048576線程10下載了:1048576線程5下載了:1048576線程10下載了:1048576線程9下載了:1048576線程4下載了:1048576線程2下載了:1048576線程5下載了:1048576線程3下載了:1048576線程8下載了:1048576線程10下載了:1048576線程9下載了:1048576線程1下載了:1048576線程7下載了:1048576線程6下載了:1048576線程10下載了:1048576線程4下載了:1048576線程3下載了:1048576線程9下載了:1048576線程1下載了:1048576線程8下載了:1048576線程6下載了:1048576線程4下載了:1048576線程10下載了:1048576線程5下載了:1048576線程7下載了:1048576線程3下載了:1048576線程1下載了:1048576線程9下載了:1048576線程2下載了:1048576線程5下載了:1048576線程4下載了:1048576線程10下載了:1048576線程1下載了:1048576線程2下載了:1048576線程1下載了:1048576線程7下載了:1048576線程8下載了:1048576線程6下載了:1048576線程9下載了:1048576線程3下載了:1048576線程1下載了:1048576線程2下載了:1048576線程5下載了:1048576線程10下載了:1048576線程4下載了:1048576線程7下載了:1048576線程10下載了:1048576線程3下載了:1048576線程7下載了:1048576線程6下載了:1048576線程8下載了:1048576線程9下載了:1048576線程10下載了:1048576線程6下載了:1048576線程1下載了:1048576線程5下載了:1048576線程4下載了:1048576線程2下載了:1048576線程9下載了:1048576線程7下載了:1048576線程6下載了:1048576線程8下載了:1048576線程2下載了:1048576線程7下載了:1048576線程3下載了:1048576線程9下載了:1048576線程6下載了:1048576線程10下載了:1048576線程5下載了:1048576線程4下載了:1048576線程1下載了:1048576線程8下載了:1048576線程3下載了:1048576線程6下載了:1048576線程9下載了:1048576線程4下載了:1048576線程7下載了:1048576線程2下載了:1048576線程5下載了:1048576線程1下載了:1048576線程10下載了:1048576線程6下載了:1048576線程10下載了:1048576線程9下載了:1048576線程1下載了:1048576線程8下載了:1048576線程5下載了:1048576線程3下載了:1048576線程4下載了:1048576線程7下載了:1048576線程2下載了:1048576線程10下載了:1048576線程6下載了:1048576線程9下載了:1048576線程5下載了:1048576線程10下載了:1048576線程8下載了:1048576線程7下載了:1048576線程1下載了:1048576線程2下載了:1048576線程4下載了:1048576線程6下載了:1048576線程10下載了:1048576線程3下載了:1048576線程5下載了:1048576線程9下載了:1048576線程2下載了:1048576線程10下載了:1048576線程6下載了:1048576線程7下載了:1048576線程8下載了:1048576線程5下載了:1048576線程9下載了:1048576線程10下載了:1048576線程4下載了:1048576線程3下載了:1048576線程6下載了:1048576線程8下載了:1048576線程7下載了:1048576線程10下載了:1048576線程5下載了:1048576線程2下載了:1048576線程3下載了:1048576線程5下載了:1048576線程7下載了:1048576線程1下載了:1048576線程2下載了:1048576線程8下載了:1048576線程9下載了:1048576線程10下載了:1048576線程4下載了:1048576線程6下載了:1048576線程7下載了:1048576線程3下載了:1048576線程2下載了:1048576線程5下載了:1048576線程8下載了:1048576線程4下載了:1048576線程10下載了:1048576線程6下載了:1048576線程1下載了:1048576線程6下載了:1048576線程5下載了:1048576線程9下載了:1048576線程7下載了:1048576線程6下載了:1048576線程3下載了:1048576線程7下載了:1048576線程10下載了:1048576線程8下載了:1048576線程5下載了:1048576線程7下載了:1048576線程1下載了:1048576線程2下載了:1048576線程6下載了:1048576線程9下載了:1048576線程5下載了:1048576線程4下載了:1048576線程8下載了:1048576線程3下載了:1048576線程8下載了:1048576線程7下載了:1048576線程7下載了:1048576線程7下載了:1048576線程7下載了:1048576線程6下載了:1048576線程3下載了:1048576線程8下載了:1048576線程5下載了:1048576線程9下載了:1048576線程10下載了:1048576線程2下載了:1048576線程4下載了:1048576線程2下載了:1048576線程1下載了:1048576線程8下載了:1048576線程5下載了:1048576線程6下載了:1048576線程10下載了:1048576線程9下載了:1048576線程7下載了:1048576線程2下載了:1048576線程4下載了:1048576線程3下載了:1048576線程2下載了:1048576線程5下載了:1048576線程8下載了:1048576線程8下載了:1048576線程6下載了:1048576線程3下載了:1048576線程1下載了:1048576線程10下載了:1048576線程4下載了:1048576線程5下載了:1048576線程2下載了:1048576線程7下載了:1048576線程6下載了:1048576線程9下載了:1048576線程4下載了:1048576線程2下載了:1048576線程5下載了:1048576線程8下載了:1048576線程6下載了:1048576線程10下載了:1048576線程7下載了:1048576線程6下載了:1048576線程6下載了:1048576線程6下載了:1048576線程6下載了:1048576線程6下載了:1048576線程6下載了:1048576線程6下載了:596259線程5下載了:1048576線程10下載了:1048576線程9下載了:1048576線程10下載了:1048576線程1下載了:1048576線程3下載了:1048576線程2下載了:1048576線程7下載了:1048576線程6下載完畢線程9下載了:1048576線程2下載了:1048576線程7下載了:1048576線程10下載了:1048576線程4下載了:1048576線程5下載了:1048576線程2下載了:1048576線程8下載了:1048576線程9下載了:1048576線程5下載了:1048576線程7下載了:1048576線程1下載了:1048576線程2下載了:1048576線程3下載了:1048576線程2下載了:1048576線程3下載了:1048576線程1下載了:1048576線程10下載了:1048576線程7下載了:1048576線程5下載了:1048576線程8下載了:1048576線程2下載了:1048576線程7下載了:596259線程7下載完畢線程10下載了:1048576線程4下載了:1048576線程9下載了:1048576線程3下載了:1048576線程1下載了:1048576線程10下載了:596259線程10下載完畢線程2下載了:1048576線程4下載了:1048576線程9下載了:1048576線程8下載了:1048576線程5下載了:1048576線程2下載了:596259線程2下載完畢線程3下載了:1048576線程1下載了:1048576線程3下載了:1048576線程4下載了:1048576線程1下載了:1048576線程9下載了:1048576線程8下載了:1048576線程3下載了:1048576線程4下載了:1048576線程5下載了:1048576線程8下載了:1048576線程9下載了:1048576線程3下載了:1048576線程5下載了:596259線程9下載了:1048576線程1下載了:1048576線程5下載完畢線程4下載了:1048576線程8下載了:1048576線程3下載了:1048576線程9下載了:1048576線程3下載了:1048576線程8下載了:1048576線程4下載了:1048576線程9下載了:596259線程9下載完畢線程1下載了:1048576線程4下載了:1048576線程3下載了:1048576線程8下載了:1048576線程1下載了:1048576線程4下載了:1048576線程8下載了:1048576線程3下載了:1048576線程1下載了:1048576線程4下載了:1048576線程3下載了:596259線程3下載完畢線程4下載了:596259線程1下載了:1048576線程4下載完畢線程8下載了:1048576線程8下載了:596259線程8下載完畢線程1下載了:1048576線程1下載了:1048576線程1下載了:596259線程1下載完畢

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄烦县| 安平县| 自治县| 广饶县| 嵩明县| 漳浦县| 那坡县| 虹口区| 西盟| 保康县| 张北县| 景德镇市| 澄迈县| 扎鲁特旗| 荣成市| 万州区| 磐石市| 白城市| 白玉县| 武胜县| 霞浦县| 华阴市| 浮梁县| 陕西省| 徐汇区| 永仁县| 河间市| 德兴市| 北流市| 若尔盖县| 且末县| 平阴县| 吉安县| 友谊县| 平陆县| 昌江| 栾城县| 治县。| 陇川县| 宜宾县| 日土县|