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

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

?? downloader.java

?? 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;  // 狀態保存配置文件    private String taskid;      // 任務標識    private String name;    // 短文件名(不包含后綴及路徑)    private String url;     // 下載源地址    private File fileSave;  // 保存路徑    private File fileProcess;//正在下載中的文件名(默認比原文件名多帶一個"_")    private int threads;    // 下載的線程數        private boolean isFirst = true;    // 是否為首次下載(需要創建狀態文件)    private boolean isInit = false;     // 是否已經初始化.    private long totalBytes;// 總文件大小    private long readBytes; // 已經讀取的大小    private long readBytesNow;  // 當次啟動后所讀的字節數        // 待完成的任務列表    private Vector<Piece> tasks = new Vector<Piece>();    // 當前的所有任務列表,包括正在處理中的與待完成的任務列表    private Vector<Piece> tasksAll = new Vector<Piece>();        // 空閑的任務線程    private Vector<PieceLoader> frees = new Vector<PieceLoader>();    // 所有執行線程,包括執行的與空閑的    private List<PieceLoader> loaders = new ArrayList<PieceLoader>();        // 運行狀態信息    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;        // -------------------------------------------------- 構造        /**     * 使用狀態文件進行斷點續傳     * @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);        // 標識為“已初始化”“續傳操作(因有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;        }        // 創建分塊,并創建相應的負責下載的線程        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;    }        // 創建狀態保存文件    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");   // 狀態保存文件                // 檢查并確保不存在相同名稱的文件名,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;                   // 創建狀態文件,并保存,字段分別為                // 任務標識, 文件名,下載源,保存路徑,文件大小, 線程數                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("出錯:創建配置文件是遇到問題!" + 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秒保存一次狀態        timer = new Timer();        timer.schedule(new MyTimerTask(), 0, 1000 * 10);    }        // ------------------------------------------------------------ 狀態信息    /** 狀態未知 */    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;    }        /** 是否已經停止的 */    public boolean isStopped() {        return state == STATE_STOPPED ? true : false;    }        /** 判斷文件是否已經全部下載完 */    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("直接運行");            // 如果還從未下載過數據,則完全初始化            if (!isInit) init0();            // 檢查相應的文件是否存在,確保不會出現重名文件            checkAndCreateConfig();            // 開始下載            state = STATE_LOADING;            loading();        }    }        /** 暫停任務 */    public void toPause() {        state = STATE_PAUSED;    }        /** 停止任務,如果任務已經完成,則重命名文件名*/    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;    }        /** 處理已經完成的任務 */    public synchronized void processWhenOk() {        timer.cancel();        fileProcess.renameTo(fileSave);        config.delete();        TaskManager.getInstance().deleteConfig(config.getId());        TaskManager.getInstance().removeTask(taskid);        //System.out.println("切片數:" + tasksAll.size());        //System.out.println("讀取數據ReadBytes:" + readBytes);    }        // ------------------------------------------------------------ 任務處理        /** 將一個新的任務區域(待完成的)添加到列表中,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());    }        /**     * 增加已讀的字節數,下載線程每次讀寫完一段數據后都會調用該方法     * @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);    }        // ------------------------------------------------------------ 任務狀態信息        /** 獲取任務的URL下載源地址 */    public String getURL() {        return url;    }        /** 獲取下載任務的最終文件保存對象 */    public File getFileSave() {        return fileSave;    }        /** 獲取下載中的文件對象 */    public File getFileProcess() {        return fileProcess;    }        /** 獲取當次啟動后已經讀取的字節 */    public long getReadBytesNow() {        return readBytesNow;    }        /** 已經讀取的總字節數(包括續傳的) */    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;    // 修正次數    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)的狀態     * 信息保存到磁盤文件中,以避免程序出現意外或突然蹦潰而造成的無法斷點續傳的功能     */    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一区二区三区免费野_久草精品视频
美美哒免费高清在线观看视频一区二区 | 99久久精品免费| 奇米777欧美一区二区| 亚洲愉拍自拍另类高清精品| 国产精品乱人伦| 日韩欧美一卡二卡| 欧美精品久久99久久在免费线| 99精品久久只有精品| 国产成人av在线影院| 午夜视频在线观看一区二区| 亚洲色图色小说| 亚洲欧美综合色| 欧美成人一区二区三区片免费| 欧美日韩国产精选| 欧美日韩极品在线观看一区| 欧美一区二区三区在线电影| 欧美三级一区二区| 欧美亚洲免费在线一区| 91麻豆免费观看| 91欧美一区二区| 成人免费av在线| 成人av动漫在线| va亚洲va日韩不卡在线观看| 免费在线观看成人| 老司机午夜精品99久久| 麻豆国产欧美一区二区三区| 麻豆国产欧美日韩综合精品二区 | 成人精品高清在线| 国产福利精品一区二区| 从欧美一区二区三区| 国产成人亚洲综合a∨婷婷| 国产一级精品在线| 国产成人夜色高潮福利影视| 国产98色在线|日韩| 成人精品视频一区二区三区尤物| 成人的网站免费观看| 91在线观看视频| 欧美色视频在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日本韩国欧美在线| 99视频精品全部免费在线| 在线观看国产一区二区| 欧美一区二区视频网站| 色噜噜狠狠色综合中国| 欧美精品精品一区| 国产偷v国产偷v亚洲高清| 亚洲精品视频免费观看| 久久91精品久久久久久秒播| 91欧美一区二区| 精品国产髙清在线看国产毛片| 国产精品每日更新在线播放网址| 亚洲一区二区三区四区在线观看 | 欧美另类一区二区三区| 久久久www免费人成精品| 亚洲欧美日韩国产中文在线| 久久精品72免费观看| 91麻豆福利精品推荐| 精品国产不卡一区二区三区| 亚洲免费资源在线播放| 久久99精品久久久久| 色婷婷av一区二区三区软件| 亚洲精品在线免费观看视频| 亚洲一级二级在线| 成人精品一区二区三区四区| 欧美一级理论片| 亚洲精品国久久99热| 国产a区久久久| 日韩欧美一区中文| 一二三区精品视频| 成人av在线播放网址| 日韩精品一区二区三区在线播放| 日韩毛片高清在线播放| 国产另类ts人妖一区二区| 欧美日韩视频在线第一区| 国产精品欧美一级免费| 久久99久久精品| 欧美一区二区在线看| 亚洲美女免费视频| 成人美女视频在线观看| 日韩精品一区二区三区老鸭窝 | 色综合中文综合网| 91麻豆国产福利精品| 国产丝袜在线精品| 紧缚捆绑精品一区二区| 777午夜精品免费视频| 一区二区在线观看免费视频播放| 国产成人精品www牛牛影视| 欧美变态凌虐bdsm| 日韩精品福利网| 欧美日韩三级在线| 一区二区三区四区激情| 99视频一区二区三区| 欧美国产在线观看| 国产福利电影一区二区三区| 久久噜噜亚洲综合| 紧缚捆绑精品一区二区| 日韩精品一区二区三区中文不卡| 免费观看在线综合色| 欧美精品第1页| 天堂影院一区二区| 欧美精品xxxxbbbb| 亚洲成年人网站在线观看| 欧美视频日韩视频在线观看| 亚洲午夜免费电影| 欧美日韩一区二区三区免费看| 亚洲一区二区精品视频| 欧美色视频在线观看| 五月天欧美精品| 欧美一区二区三区不卡| 麻豆精品在线视频| 日韩视频不卡中文| 激情综合色播激情啊| 久久影视一区二区| 国产成人日日夜夜| 亚洲欧洲性图库| aaa欧美大片| 亚洲一区二区偷拍精品| 538在线一区二区精品国产| 美女一区二区在线观看| 精品国产91久久久久久久妲己 | 国产伦精品一区二区三区免费迷| 久久久久综合网| 成人永久免费视频| 中文字幕综合网| 欧美人体做爰大胆视频| 另类小说一区二区三区| 国产亚洲制服色| 91性感美女视频| 首页综合国产亚洲丝袜| 日韩精品最新网址| 粉嫩嫩av羞羞动漫久久久| 亚洲欧美在线aaa| 欧美羞羞免费网站| 久久国产精品第一页| 亚洲国产成人午夜在线一区 | 亚洲欧美日韩国产综合| 9191成人精品久久| 国产不卡视频在线播放| 有码一区二区三区| 欧美成人乱码一区二区三区| 不卡的av电影| 五月综合激情网| 国产欧美精品一区aⅴ影院| 91在线云播放| 日本v片在线高清不卡在线观看| 久久精品亚洲精品国产欧美| 在线一区二区三区四区五区| 麻豆精品在线视频| 一区精品在线播放| 欧美电视剧免费全集观看| 99久久免费视频.com| 美女任你摸久久| 亚洲免费观看高清完整版在线 | 中文字幕一区二区三区在线播放| 欧美日韩一区久久| 成人免费三级在线| 水野朝阳av一区二区三区| 国产精品情趣视频| 777午夜精品免费视频| 99综合电影在线视频| 麻豆视频观看网址久久| 亚洲精品视频观看| 国产色婷婷亚洲99精品小说| 欧美日本一区二区| av在线播放不卡| 国产又粗又猛又爽又黄91精品| 亚洲精品高清视频在线观看| 欧美精品一区二区三| 欧美日韩国产小视频| 成人高清在线视频| 麻豆国产精品一区二区三区| 亚洲综合男人的天堂| 中文字幕不卡的av| 欧美va亚洲va国产综合| 欧美日韩国产美| 色久优优欧美色久优优| 成人精品免费看| 国内外成人在线| 日韩国产精品91| 亚洲综合一区二区| 国产精品久久久久久一区二区三区| 日韩欧美在线影院| 欧美精品 日韩| 欧美色综合天天久久综合精品| 99久免费精品视频在线观看| 国产乱国产乱300精品| 蜜臀av一区二区在线免费观看| 亚洲综合在线电影| 亚洲精品乱码久久久久久久久| 欧美国产精品v| 国产亚洲欧美色| 久久久不卡网国产精品二区| 日韩一级免费观看| 911国产精品| 欧美一区二区三区在线| 欧美自拍偷拍午夜视频| 91免费版pro下载短视频| 99国产精品一区| www.成人网.com| 91一区二区在线|