亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? downloader.java

?? 一個Mp3在線搜索器
?? JAVA
字號:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package biz.tbuy.huliqing.jloading.downloader;import biz.tbuy.huliqing.jloading.Elog;import biz.tbuy.huliqing.jloading.TaskManager;import java.io.File;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask;import java.util.Vector;/** * * @author huliqing */public class Downloader {    private Config config;  // 狀態(tài)保存配置文件    private String taskid;      // 任務標識    private String name;    // 短文件名(不包含后綴及路徑)    private String url;     // 下載源地址    private File fileSave;  // 保存路徑    private File fileProcess;//正在下載中的文件名(默認比原文件名多帶一個"_")    private int threads;    // 下載的線程數(shù)        private boolean isFirst = true;    // 是否為首次下載(需要創(chuàng)建狀態(tài)文件)    private boolean isInit = false;     // 是否已經(jīng)初始化.    private long totalBytes;// 總文件大小    private long readBytes; // 已經(jīng)讀取的大小    private long readBytesNow;  // 當次啟動后所讀的字節(jié)數(shù)        // 待完成的任務列表    private Vector<Piece> tasks = new Vector<Piece>();    // 當前的所有任務列表,包括正在處理中的與待完成的任務列表    private Vector<Piece> tasksAll = new Vector<Piece>();        // 空閑的任務線程    private Vector<PieceLoader> frees = new Vector<PieceLoader>();    // 所有執(zhí)行線程,包括執(zhí)行的與空閑的    private List<PieceLoader> loaders = new ArrayList<PieceLoader>();        // 運行狀態(tài)信息    private int state = 0;    private final static int STATE_NONE = 0;    private final static int STATE_READY = 1;    private final static int STATE_LOADING = 2;    private final static int STATE_PAUSED = 3;    private final static int STATE_STOPPED = 4;    //private final static int STATE_OK = 5;        // -------------------------------------------------- 構造        /**     * 使用狀態(tài)文件進行斷點續(xù)傳     * @param config     */    public Downloader(Config config) {        this.config = config;                taskid = config.getId();        name = config.getName();        url = config.getURLs().get(0);        fileSave = new File(config.getSave());        threads = config.getThreads();        totalBytes = config.getLength();    // 1 文件長度                List<Piece> pieces = config.loadPieces();   // 2 任務列表        //System.out.println("pieces=" + pieces.size());        for (Piece p : pieces) {            tasksAll.add(p);            tasks.add(p);        }        // 初始化已讀文件的長度,將文件長度減去未讀的文件長度,即是已讀的長度        for (Piece p : tasksAll) {            readBytes += (p.getPos() - p.getStart());        }        readBytes += pieces.size();        //System.out.println("readBytes=" + readBytes);        // 標識為“已初始化”“續(xù)傳操作(因有Config文件)”        isInit = true;        isFirst = false;        state = STATE_READY;    }        /**     * 新建任務方式進行下載     * @param name     * @param url     * @param save     * @param threads     * @throws java.lang.Exception     */    public Downloader(String taskid, String name, String url, String save, int threads) {        this.taskid = taskid;        this.name = name;        this.url = url;        this.fileSave = new File(save);        this.threads = threads;        new Thread(new Runnable(){            public void run() {                init0();            }        }).start();    }    /** 首次下載文件(即非使用Config文件的方式),需要初始化相關信息 */    private void init0() {        // 對文件進行分塊        try {            totalBytes = new URL(url).openConnection().getContentLength();            if (totalBytes == -1) state = STATE_NONE;        } catch (IOException ioe) {            return;        }        // 創(chuàng)建分塊,并創(chuàng)建相應的負責下載的線程        long pieceSize = (long) Math.ceil((double) totalBytes / (double) threads);        long pStart = 0;        long pEnd = 0;        tasksAll.clear();        tasks.clear();        for (int i = 0; i < threads; i++) {            if (i == 0) {                pStart = pieceSize * i;            }            if (i == threads - 1) {                pEnd = totalBytes;            } else {                pEnd = pStart + pieceSize;            }            Piece piece = new Piece(pStart, pStart, pEnd);            tasksAll.add(piece);            tasks.add(piece);            pStart = pEnd + 1;        }        // 標識為“已初始化”“首次下載”        isInit = true;        isFirst = true;        state = STATE_READY;    }        // 創(chuàng)建狀態(tài)保存文件    private synchronized void checkAndCreateConfig() {        int n = 0;        try {            // 判斷是否為首次下載,如果是,則需要判斷是否存在同名的文件,若存在同            // 名的文件,則重新更新保存路徑            if (isFirst) {                String path = fileSave.getAbsolutePath();                String f_head = path.substring(0, path.lastIndexOf("."));                String f_suffix = path.substring(path.lastIndexOf(".")); // 含"."                File f1 = new File(path);               // 最終保存文件                File f2 = new File(path + "_");         // 未完成任務之前的文件名                File f3 = new File(path + "_config");   // 狀態(tài)保存文件                // 檢查并確保不存在相同名稱的文件名,saveChange標識(存在相同的文件名)                while (f1.exists() || f2.exists() || f3.exists()) {                    n++;                    path = f_head + "[" + n + "]" + f_suffix;                    f1 = new File(path);                    f2 = new File(path + "_");                    f3 = new File(path + "_config");                }                try {                    f2.createNewFile();                } catch (Exception e) {                }                fileSave = f1;                fileProcess = f2;                isFirst = false;                   // 創(chuàng)建狀態(tài)文件,并保存,字段分別為                // 任務標識, 文件名,下載源,保存路徑,文件大小, 線程數(shù)                config = ConfigFactory.createConfig(                        taskid, name, url, fileSave.getAbsolutePath(), totalBytes, threads);                config.savePieces(tasksAll);                // 更新任務列表中的信息                TaskManager.getInstance().updateConfigPath(config);            } else {                fileProcess = new File(fileSave.getAbsolutePath() + "_");            }        } catch (Exception e) {            Elog.log("出錯:創(chuàng)建配置文件是遇到問題!" + getClass().getName());        }    }        private void loading() {        // 初始化下載線程(先清除,以確保沒有不可用的線程)        loaders.clear();        for (int i = 0; i < threads; i++) {            PieceLoader pl = new PieceLoader(this, tasks);            pl.start();            loaders.add(pl);        }                // 初始化定時器,每10秒保存一次狀態(tài)        timer = new Timer();        timer.schedule(new MyTimerTask(), 0, 1000 * 10);    }        // ------------------------------------------------------------ 狀態(tài)信息    /** 狀態(tài)未知 */    public boolean isNone() {        return state == STATE_NONE ? true : false;    }        /** 是否運行中的 */    public boolean isLoading() {        return state == STATE_LOADING ? true : false;    }        /** 是否準備就緒的 */    public boolean isReady() {        return state == STATE_READY ? true : false;    }        /** 是否暫停中的 */    public boolean isPaused() {        return state == STATE_PAUSED ? true : false;    }        /** 是否已經(jīng)停止的 */    public boolean isStopped() {        return state == STATE_STOPPED ? true : false;    }        /** 判斷文件是否已經(jīng)全部下載完 */    public synchronized boolean isOk() {        return (readBytes >= totalBytes);    }        // ------------------------------------------------------------ 任務控制        /** 開始下載任務 */    public void toStart() {        if (isLoading()) {            //System.out.println("正在運行中");            return;        } else if (isPaused()) {    // 暫停中的...            //System.out.println("暫停轉為運行...");            state = STATE_LOADING;            for (PieceLoader pl : loaders) {                pl.toContinue();            }        } else {            //System.out.println("直接運行");            // 如果還從未下載過數(shù)據(jù),則完全初始化            if (!isInit) init0();            // 檢查相應的文件是否存在,確保不會出現(xiàn)重名文件            checkAndCreateConfig();            // 開始下載            state = STATE_LOADING;            loading();        }    }        /** 暫停任務 */    public void toPause() {        state = STATE_PAUSED;    }        /** 停止任務,如果任務已經(jīng)完成,則重命名文件名*/    public synchronized void toStop() {        try {            if (isLoading() || isPaused()) {                timer.cancel();                config.savePieces(tasksAll);                state = STATE_STOPPED;                for (PieceLoader pl : loaders) {                    pl.interrupt();                }            }        } catch (Exception exception) {        }    }        /** 刪除下載任務 */    public boolean toDelete() {        toStop();        if (fileProcess != null && fileProcess.exists()) {            fileProcess.delete();        }        if (config != null) {            config.delete();            TaskManager.getInstance().deleteConfig(config.getId());        }        TaskManager.getInstance().removeTask(taskid);        return true;    }        /** 處理已經(jīng)完成的任務 */    public synchronized void processWhenOk() {        timer.cancel();        fileProcess.renameTo(fileSave);        config.delete();        TaskManager.getInstance().deleteConfig(config.getId());        TaskManager.getInstance().removeTask(taskid);        //System.out.println("切片數(shù):" + tasksAll.size());        //System.out.println("讀取數(shù)據(jù)ReadBytes:" + readBytes);    }        // ------------------------------------------------------------ 任務處理        /** 將一個新的任務區(qū)域(待完成的)添加到列表中,tasks, tasksAll */    public synchronized void addTask(Piece piece) {        this.tasksAll.add(piece);        this.tasks.add(piece);        config.savePieces(tasksAll);        //System.out.println("tasksAll.size=" + tasksAll.size());        //System.out.println("tasks.size=" + tasks.size());    }        /**     * 增加已讀的字節(jié)數(shù),下載線程每次讀寫完一段數(shù)據(jù)后都會調(diào)用該方法     * @param readBytes     */    public synchronized void growReadBytes(long bytes) {        readBytesNow += bytes;        readBytes += bytes;    }        /** 是否有空的任務線程 */    public synchronized boolean isFreeLoader() {        return frees.size() > 0;    }        /** 添加一個空閑的任務線程 */    public synchronized void addFreeLoader(PieceLoader pl) {        frees.add(pl);    }        /** 移除一個空閑線程 */    public synchronized void removeFreeLoader(PieceLoader pl) {        frees.remove(pl);    }        // ------------------------------------------------------------ 任務狀態(tài)信息        /** 獲取任務的URL下載源地址 */    public String getURL() {        return url;    }        /** 獲取下載任務的最終文件保存對象 */    public File getFileSave() {        return fileSave;    }        /** 獲取下載中的文件對象 */    public File getFileProcess() {        return fileProcess;    }        /** 獲取當次啟動后已經(jīng)讀取的字節(jié) */    public long getReadBytesNow() {        return readBytesNow;    }        /** 已經(jīng)讀取的總字節(jié)數(shù)(包括續(xù)傳的) */    public long getReadBytes() {        return readBytes;    }        /** 獲取總文件長度 */    public long getTotalBytes() {        return totalBytes;    }        /** 獲取下載速度 (k/s) */    public long getSpeed() {        long sp = 0;        for (PieceLoader pl : loaders) {            sp += pl.getSpeed();        }        return sp;    }        // ------------------------------------------------------------ 偏移修正    private int repairCount;    // 修正次數(shù)    private long offsetTotal;   // 偏移量    public long getOffsetTotal() {        return offsetTotal;    }    public synchronized void setOffsetTotal(long offsetTotal) {        this.offsetTotal = offsetTotal;    }    public int getRepairCount() {        return repairCount;    }    public synchronized void setRepairCount(int repairCount) {        this.repairCount = repairCount;    }        // ------------------------------------------------------------ 定時器        /**     * 任務定時器,每隔一段時間,這個定時器會把當前下載任務的各個分片(Piece)的狀態(tài)     * 信息保存到磁盤文件中,以避免程序出現(xiàn)意外或突然蹦潰而造成的無法斷點續(xù)傳的功能     */    private Timer timer;        private class MyTimerTask extends TimerTask {        @Override        public void run() {            try {                if (isOk()) this.cancel();                config.savePieces(tasksAll);            } catch (Exception ex) {                //Elog.log("MyTimerTask");            }        }    }    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品黄色片免费大全| 中文字幕精品一区二区精品绿巨人 | 暴力调教一区二区三区| 亚洲国产毛片aaaaa无费看| 久久久久国色av免费看影院| 精品视频免费看| 99久久久免费精品国产一区二区| 日本美女视频一区二区| 一区二区三区中文字幕| 亚洲国产精品精华液ab| 欧美一级夜夜爽| 在线中文字幕一区二区| 成人免费视频免费观看| 麻豆国产欧美日韩综合精品二区| 一区二区三区在线视频观看58| 久久蜜桃av一区精品变态类天堂 | 欧美aⅴ一区二区三区视频| 一区二区三区在线视频观看| 中文字幕免费不卡在线| 日韩精品一区二区三区蜜臀| 欧美精品丝袜久久久中文字幕| 91麻豆成人久久精品二区三区| 国产白丝精品91爽爽久久| 奇米色一区二区三区四区| 亚洲国产精品影院| 亚洲视频香蕉人妖| 国产精品乱子久久久久| 久久精子c满五个校花| 精品国产三级电影在线观看| 欧美一区二区三区四区五区| 欧美色国产精品| 在线观看一区日韩| 一本高清dvd不卡在线观看| 成人午夜免费视频| 成人免费视频国产在线观看| 福利一区二区在线| 国产高清在线精品| 国产成人免费视频| 国产福利一区二区三区视频 | 国产亚洲制服色| 久久免费看少妇高潮| 久久久综合激的五月天| 久久婷婷一区二区三区| 国产午夜精品久久久久久免费视| 久久在线免费观看| 国产欧美精品一区| 国产精品美女www爽爽爽| 中文字幕一区免费在线观看| 国产精品久久看| 亚洲美女视频在线观看| 亚洲一区二区在线观看视频| 亚洲一区二区在线播放相泽| 午夜精品爽啪视频| 久久精品99国产精品| 精品一区免费av| 国产成人综合亚洲网站| 成人高清在线视频| 欧美在线一区二区| 91精品国产色综合久久不卡电影| 日韩美女主播在线视频一区二区三区| 日韩精品一区二区三区视频播放 | 欧美另类变人与禽xxxxx| 欧美日本韩国一区二区三区视频| 欧美肥妇毛茸茸| 精品国产不卡一区二区三区| 亚洲国产高清在线| 一区二区不卡在线播放 | 成人免费毛片片v| 色综合视频一区二区三区高清| 日本道在线观看一区二区| 欧美午夜精品久久久久久超碰| 日韩欧美在线123| 国产三级一区二区| 亚洲一区中文在线| 精品一区二区日韩| 色综合夜色一区| 91精品婷婷国产综合久久性色| 精品va天堂亚洲国产| 国产精品理伦片| 天天影视网天天综合色在线播放| 国产精品一区二区视频| 91免费国产在线| 日韩一区二区三区精品视频| 中文字幕av不卡| 亚洲国产精品久久久男人的天堂 | 精品一区二区三区不卡| 色综合一个色综合亚洲| 精品欧美一区二区在线观看| 一区二区中文视频| 日本成人在线一区| 99精品久久只有精品| 精品国内二区三区| 亚洲一区二区美女| 国产不卡在线一区| 日韩一区二区视频在线观看| 国产精品国产三级国产a| 老司机免费视频一区二区| 色综合色综合色综合 | 午夜免费欧美电影| kk眼镜猥琐国模调教系列一区二区| 91精品国产欧美一区二区| 中文字幕综合网| 国产麻豆视频精品| 日韩一区二区中文字幕| 一区二区久久久久久| 成人免费毛片app| 2023国产精品视频| 日本欧美大码aⅴ在线播放| 在线中文字幕不卡| 国产精品嫩草久久久久| 国产伦精品一区二区三区免费| 欧美日韩亚洲综合一区| 亚洲男女一区二区三区| 国产不卡视频一区二区三区| 精品国产三级a在线观看| 三级亚洲高清视频| 欧美日韩精品欧美日韩精品| 亚洲天堂精品在线观看| 成人影视亚洲图片在线| 久久久久久电影| 久久成人免费日本黄色| 日韩欧美电影在线| 五月激情综合色| 欧美日韩国产片| 亚洲一区视频在线观看视频| 色天天综合久久久久综合片| 成人免费一区二区三区视频| 成人黄色a**站在线观看| 国产人成亚洲第一网站在线播放| 精彩视频一区二区| 精品成人在线观看| 国内精品在线播放| www激情久久| 国产成人午夜视频| 国产欧美综合在线观看第十页| 国产又粗又猛又爽又黄91精品| 精品国精品国产尤物美女| 久久国产麻豆精品| 日韩一级片在线播放| 麻豆视频一区二区| 久久夜色精品国产欧美乱极品| 久久精品国产亚洲aⅴ| 日韩一级大片在线观看| 久久99久久精品| 久久久久国产精品人| 国产高清成人在线| 国产精品成人在线观看| 色婷婷亚洲婷婷| 亚洲国产精品嫩草影院| 91麻豆精品国产91久久久久久久久| 日本不卡中文字幕| 精品国产污污免费网站入口| 国产乱人伦偷精品视频免下载| 欧美国产日本韩| 色悠悠久久综合| 日韩电影在线观看一区| 精品国一区二区三区| 成人av手机在线观看| 亚洲视频在线观看一区| 欧美人与z0zoxxxx视频| 麻豆精品一区二区| 中文字幕 久热精品 视频在线 | 午夜欧美电影在线观看| 欧美一区永久视频免费观看| 国内精品国产三级国产a久久| 欧美极品少妇xxxxⅹ高跟鞋| 91蝌蚪porny| 免费在线观看一区| 欧美激情综合在线| 日本道免费精品一区二区三区| 日韩av在线免费观看不卡| 国产三区在线成人av| 欧美性xxxxx极品少妇| 久久精品国产精品亚洲综合| 国产精品萝li| 日韩一区二区三区精品视频| 国产成人高清视频| 日韩综合小视频| 国产精品久久久久永久免费观看| 欧美日韩一区二区电影| 国产成人精品aa毛片| 视频一区在线播放| 欧美国产1区2区| 日韩免费视频一区二区| 91精品福利视频| 国产在线视频精品一区| 亚洲国产精品自拍| 久久久久九九视频| 欧美精品自拍偷拍动漫精品| 久久99精品国产麻豆婷婷| 亚洲一区免费在线观看| 精品毛片乱码1区2区3区| 国产精品自拍毛片| 亚洲黄色片在线观看| 精品美女在线观看| 懂色av一区二区夜夜嗨| 美女mm1313爽爽久久久蜜臀| 中文字幕日韩欧美一区二区三区| 555夜色666亚洲国产免| 97精品国产露脸对白|