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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? duoxancheng.txt

?? 次JAVA程序支持多線程下載
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
{
private long startPos;//下載起點(diǎn)
private long endPos;//下載結(jié)束點(diǎn)
private boolean done = false;
private boolean stop=false;
private String address;//下載地址
private DownloadStat stat;//統(tǒng)計(jì)線程 
private RandomAccessFile file=null;

public DownThread(String address,String localFilePath,long startPos, long endPos,DownloadStat stat) throws IOException
{
   this.address = address;
   this.startPos = startPos;
   this.endPos = endPos;
   this.address=address;
   file=new RandomAccessFile(localFilePath, "rw");
   file.seek(startPos);//設(shè)置啟動(dòng)位置
   this.stat=stat; 
}

public void run()
{
   InputStream input =null;
   HttpURLConnection httpConnection=null;
   try
   {
    httpConnection = (HttpURLConnection) new URL(address).openConnection();
    if(httpConnection==null)
    {
     return;
    }
    String sProperty = new StringBuffer("bytes=").append(startPos).append("-").append(endPos).toString();
    httpConnection.setRequestProperty("RANGE", sProperty);//設(shè)置下載范圍
    input =httpConnection.getInputStream();
    byte[] buf=new byte[1024];
    int offset;
    while(!stop&&(offset=input.read(buf,0,buf.length))!=-1)
    {
     file.write(buf, 0,offset);
     stat.updateDownloadSize(getName(),startPos,endPos,offset);//將下載的數(shù)據(jù)量進(jìn)行累加
    }
   }
   catch (Exception ex)
   {
    ex.printStackTrace();
   }
   finally
   {
    try
    {
     file.close();
     if(input!=null)
     {
      input.close();
     }
    }
    catch (IOException e)
    {
     e.printStackTrace();
    }
    done = true;
    if(httpConnection!=null)
    {
     httpConnection.disconnect();
    }
   }
}
/**
* 判斷是否完成
* @return
*/
public boolean isDone()
{
   return done;
}
/**
* 終止下載
*/
public void stopDown()
{
   this.stop=true;
}
}
/**
* 下載統(tǒng)計(jì)類
* 包括已經(jīng)下載的數(shù)據(jù)量、下載平均速度、已經(jīng)下載時(shí)間、完成百分比等等
* @author zean
* @create date 2008-06-30
*/
public class DownloadStat extends Thread
{
private long beginTime;//本次下載開(kāi)始時(shí)間
private BigDecimal downloadedSize;//本次下載量累計(jì)
private long fileLength;//文件長(zhǎng)度
private BigDecimal initSpeed;
private boolean stopStat=false;
private DownloadHis downloadHis;
private String fileName;
/**
* @param fileLength 文件長(zhǎng)度
* @param downloadHis 下載歷史信息
*/
public void init(long fileLength,String fileName)
{
   this.beginTime=System.currentTimeMillis();
   this.downloadedSize=new BigDecimal(0);
   this.fileLength=fileLength;
   this.initSpeed=new BigDecimal(0);
   this.fileName=fileName;
   if(downloadHis==null)
   {
    downloadHis=new DownloadHis(fileName);
   }
   else
   {
    downloadHis.initDownloadedInfo(fileName);
   }
}
public boolean isDownloaded()
{
   if((int)downloadHis.getHisPercent()==10000)
   {
    return true;
   }
   return false;
}

/**
* 定時(shí)將下載信息寫(xiě)入磁盤(pán),由于文件下載完畢后也有寫(xiě)入操作,所以寫(xiě)入方法加了同步鎖
*/
public void run()
{
   while(!stopStat)
   {
    try
    {
     sleep(30000);//隔30秒自動(dòng)寫(xiě)入一次
    }
    catch (InterruptedException e)
    {
     e.printStackTrace();
    }
    /**
    * 下載完成一個(gè)文件后暫停自動(dòng)寫(xiě)入操作
    */
    if(isDownloaded()||getPercent().intValue()==100)
    {
     try
     {
      synchronized(this)
      {
       wait();
      }
     }
     catch (InterruptedException e)
     {
      e.printStackTrace();
     }
    }
    if(getSpeed().doubleValue()>0)
    {
     writeDownInfoToFile();
    }
   }
}
public void stopStat()
{
   this.stopStat=true;
}
/**
* 更新下載數(shù)據(jù)量(單位:字節(jié))以及下載起始位置
* 由于可能同時(shí)有多個(gè)線程進(jìn)行操作,所以加同步鎖
* @param signalDownSize
*/
public synchronized void updateDownloadSize(String threadId,long startPos,long endPos,long size)
{
   downloadedSize=downloadedSize.add(new BigDecimal(size));
   downloadHis.updateDownInfo(threadId,startPos,endPos,size);
}
public void initDownInfo(String threadId,long startPos,long endPos)
{
   downloadHis.updateDownInfo(threadId,startPos,endPos,0);
}
/**
* 獲取已經(jīng)下載的數(shù)據(jù)量(單位:M)
* @return
*/
public BigDecimal getDownloadedSize()
{
   return (downloadedSize.add(downloadHis.getHisDownloadedSize())).divide(new BigDecimal(1048576),2,BigDecimal.ROUND_HALF_UP);
}

/**
* 已經(jīng)下載時(shí)間(時(shí)-分-秒)
*/
public String getPassedTime()
{
   return parseTime(new BigDecimal(System.currentTimeMillis()-beginTime));
}
/**
* 獲取下載百分比
* @return
*/
public BigDecimal getPercent()
{
   return (downloadedSize.add(downloadHis.getHisDownloadedSize())).multiply(new BigDecimal(100)).divide(new BigDecimal(fileLength), 2, BigDecimal.ROUND_HALF_UP);
}
/**
* 下載平均速度(K/秒)
* @return
*/
public BigDecimal getDownSpeed()
{
   return getSpeed().multiply(new BigDecimal(1000)).divide(new BigDecimal(1024), 1, BigDecimal.ROUND_HALF_UP);
}
/**
* 下載平均速度(字節(jié)/毫秒)
* @return
*/
private BigDecimal getSpeed()
{
   BigDecimal timeOffset=new BigDecimal(System.currentTimeMillis()-beginTime);
   if(timeOffset.longValue()==0)
   {
    return initSpeed;
   }
   return downloadedSize.divide(timeOffset,1,BigDecimal.ROUND_HALF_UP);
}
/**
* 估計(jì)剩余時(shí)間(時(shí)-分-秒)
* @param timespace
* @return
*/
public String getLeaveTime()
{
   if(getSpeed().intValue()<1)
   {
    return "0";
   }
   BigDecimal leaveTime=(new BigDecimal(fileLength).subtract(downloadedSize).subtract(this.downloadHis.getHisDownloadedSize())).divide(getSpeed(), 2, BigDecimal.ROUND_HALF_UP);
   return parseTime(leaveTime);
}
/**
* 將下載信息寫(xiě)入磁盤(pán)
*/
public synchronized void writeDownInfoToFile()
{
   downloadHis.writeDownInfoToFile(fileLength, downloadedSize,getPercent().doubleValue());
}
/**
* 獲取歷史下載信息
* @return
*/
public List getDownloadedInfo()
{
   return this.downloadHis.getDownloadedInfo();
}
/**
* 判斷服務(wù)器文件是否發(fā)生變化
* @return
*/
public boolean isChange()
{
   return (downloadHis.getHisFileLength()!=0&&fileLength!=downloadHis.getHisFileLength());
}
public String getFileName()
{
   return this.fileName;
}
/**
* 獲取歷史下載百分比
* @return
*/
public int getHisPercent()
{
   return downloadHis.getHisPercent();
}
/**
* 解析時(shí)間成 時(shí)-分-秒的形式
* @param timeOffset
* @return
*/
private String parseTime(BigDecimal timeOffset)
{
   BigDecimal times=timeOffset.divide(new BigDecimal(1000), 1, BigDecimal.ROUND_HALF_UP);
   BigDecimal hours = times.divide(new BigDecimal(3600), 0, BigDecimal.ROUND_DOWN);
   BigDecimal mimutes = times.subtract(hours.multiply(new BigDecimal(3600))).divide(new BigDecimal(60), 0, BigDecimal.ROUND_DOWN);
   BigDecimal second = times.subtract(hours.multiply(new BigDecimal(3600))).subtract(mimutes.multiply(new BigDecimal(60)));
   return hours.longValue() + "時(shí)," + mimutes.longValue() + "分," + second.doubleValue() + "秒";
}
}
/**
* 下載歷史記錄
* 用于記錄下載量,各線程下載情況,以及將下載信息寫(xiě)入到本地磁盤(pán)
* @author zean
* @crate date 2008-07-01
*/
public class DownloadHis
{
private List downloadedInfo;// 歷史線程下載記錄
private BigDecimal hisDownloadedSize;//歷史下載量
private long hisFileLength=0;//歷史文件大小,由于源文件大小有可能發(fā)生變化,一旦文件大小與當(dāng)前大小不一致,則需要重新下載
private Map infoMap=null;//
private String fileName=null;
private int hisPercent=0;//歷史下載百分比
public DownloadHis()
{
   infoMap=new HashMap();
}
public DownloadHis(String fileName)
{
   this.fileName=fileName;
   infoMap=new HashMap();
   initDownloadedInfo(fileName);
}

/**
* 初始化歷史下載信息
*/
public void initDownloadedInfo(String fileName)
{
   downloadedInfo=null;
   hisDownloadedSize=new BigDecimal(0);
   infoMap.clear();
   hisFileLength=0;
   hisPercent=0;
   this.fileName=fileName;
   SAXReader reader=new SAXReader();
   File file=new File(getFilePath(fileName));
   if(!file.exists())
   {
    return;
   }
   Document doc=null;
   try
   {
    doc = reader.read(file);
   }
   catch (DocumentException e)
   {
    e.printStackTrace();
   }
   Element root=doc.getRootElement();
   List elements=root.elements();
   if(elements==null||elements.size()<1)
   {
    return;
   }
   List list=new ArrayList();
   Element element=null;
   setHisPercent(root.attributeValue("percent"));
   setHisDownloadedSize(root.attributeValue("downloadedSize"));
   setHisFileLength(root.attributeValue("totalSize"));
   for(int i=0;i<elements.size();i++)
   {
    element=(Element)elements.get(i);
    long startPos=Long.parseLong(element.attributeValue("startPos"));
    long endPos=Long.parseLong(element.attributeValue("endPos"));
    if(startPos<=endPos)
    {
     list.add(new DownInfo(element.attributeValue("threadId"),startPos,endPos));
    }
   }
   setDownloadedInfo(list);
}

/**
* 將下載信息寫(xiě)入磁盤(pán)
*/
protected void writeDownInfoToFile(long fileLength,BigDecimal downloadedSize,double downPercent)
{
   if(!new File(UpdateService.getTempFolder()+fileName).exists())
   {
    return;
   }
   StringBuffer buf=new StringBuffer();
   buf.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>").append("\n<threads totalSize=\""+fileLength+"\" downloadedSize=\""+downloadedSize.add(getHisDownloadedSize()).longValue()+"\" percent=\""+downPercent+"\">\n");
   Set set=infoMap.entrySet();
   Iterator it=set.iterator();
   Map.Entry entry;
   DownInfo downInfo;
   while(it.hasNext())
   {
    entry=(Map.Entry)it.next();
    downInfo=(DownInfo)entry.getValue();
    buf.append("<thread threadId=\""+entry.getKey()+"\" startPos=\""+downInfo.getStartPos()+"\" endPos=\""+downInfo.getEndPos()+"\"></thread>\n");
   }
   buf.append("</threads>");
   FileWriter fw = null;
   try
   {
    fw = new FileWriter(getFilePath(fileName));
    fw.write(buf.toString(), 0, buf.length());
    fw.close();
   }
   catch (IOException e1)
   {
    e1.printStackTrace();
   }
}
/**
* 更新線程下載信息
* @param infoMap 封裝了各個(gè)線程的下載情況
* @param threadId 線程名
* @param startPos 起點(diǎn)位置
* @param endPos 終點(diǎn)位置
* @param size 即時(shí)下載量
*/
public void updateDownInfo(String threadId,long startPos,long endPos,long size)
{
   DownInfo downInfo=(DownInfo)infoMap.get(threadId);
   if(downInfo==null)
   {
    downInfo=new DownInfo(threadId,startPos,endPos);
   }
   else
   {
    downInfo.updateStartPos(size);
   }
   infoMap.put(threadId,downInfo);
}

private void setDownloadedInfo(List downloadedInfo)
{
   this.downloadedInfo = downloadedInfo;
}
/**
* 讀取上次下載的信息作為斷點(diǎn)續(xù)傳的基礎(chǔ)
* @return
* @throws DocumentException
*/
public List getDownloadedInfo()
{
   return downloadedInfo;
}
/**
* 獲取歷史下載百分比
* @return
*/
public int getHisPercent()
{
   return this.hisPercent;
}
private void setHisPercent(String percent)
{
   if(percent!=null)
   {
    this.hisPercent=new BigDecimal(percent).multiply(new BigDecimal(100)).intValue();
   }
}
/**
* 獲取歷史下載量
* @return
*/
public BigDecimal getHisDownloadedSize()
{
   return hisDownloadedSize;
}
private void setHisDownloadedSize(String hisDownloadedSize)
{
   if(hisDownloadedSize!=null)
   {
    this.hisDownloadedSize = new BigDecimal(hisDownloadedSize);
   }
}
/**
* 獲取歷史文件長(zhǎng)度(用于下載前與當(dāng)前下載文件進(jìn)行比較)
* @return
*/
public long getHisFileLength()
{
   return hisFileLength;
}
private void setHisFileLength(String hisFileLength)
{
   if(hisFileLength!=null)
   {
    this.hisFileLength = Long.parseLong(hisFileLength);
   }
}
/**
* 獲取歷史記錄信息文件地址
* @param fileName
* @return
*/
private String getFilePath(String fileName)
{
   return UpdateService.getTempFolder()+fileName+".xml";
}
/**
* 獲取下載文件名
* @return
*/
public String getFileName()
{
   return this.fileName;
}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类在线视频| 国产精品进线69影院| 国产成人在线影院| 亚洲日本va午夜在线电影| 日韩一区二区麻豆国产| 成人精品视频一区二区三区尤物| 亚洲一区二区精品视频| 国产欧美一区二区精品仙草咪| 欧美日韩不卡视频| 99久久免费精品高清特色大片| 麻豆免费看一区二区三区| 亚洲女厕所小便bbb| 久久久久久麻豆| 欧美一级欧美一级在线播放| 91麻豆蜜桃一区二区三区| 国产毛片一区二区| 日韩高清欧美激情| 亚洲一区在线观看免费 | 在线观看视频91| 国产一区999| 久久99热国产| 图片区日韩欧美亚洲| 亚洲精品国产一区二区精华液 | 国产偷国产偷精品高清尤物 | 色婷婷综合久色| 国产成人精品影视| 久久99国产精品久久99果冻传媒| 亚洲国产成人va在线观看天堂| 国产精品久久久久久久久搜平片| 欧美精品一区二区三区蜜桃| 欧美一区二区视频免费观看| 欧美日韩在线免费视频| 色狠狠综合天天综合综合| 成人av网址在线| 国产99久久久国产精品免费看| 精品一区二区三区香蕉蜜桃| 9i在线看片成人免费| 国产一区二区女| 寂寞少妇一区二区三区| 精品一区二区久久| 精品无人区卡一卡二卡三乱码免费卡 | 欧美一区二区三区成人| 777a∨成人精品桃花网| 欧美人伦禁忌dvd放荡欲情| 欧美三日本三级三级在线播放| 91久久精品一区二区三区| 日本精品视频一区二区| 91色九色蝌蚪| 欧美四级电影网| 欧美日韩在线播| 欧美一区二区在线不卡| 日韩精品影音先锋| 精品久久人人做人人爽| 久久老女人爱爱| 亚洲国产高清aⅴ视频| 亚洲人成在线播放网站岛国| 亚洲人成人一区二区在线观看| 亚洲精品高清在线观看| 一区二区日韩av| 日韩黄色免费网站| 蜜臀国产一区二区三区在线播放| 久久99久久久欧美国产| 国产成人综合网| 91在线观看地址| 欧美日韩国产高清一区二区三区| 日韩亚洲欧美中文三级| 26uuu精品一区二区在线观看| 国产精品污网站| 一区二区三区欧美视频| 日本女人一区二区三区| 国产酒店精品激情| 91亚洲男人天堂| 欧美一区国产二区| 日本一区二区免费在线| 亚洲色大成网站www久久九九| 天堂在线一区二区| 国产精品一二三在| 日本乱码高清不卡字幕| 日韩欧美的一区二区| 日本一二三四高清不卡| 亚洲国产日韩精品| 国产麻豆精品一区二区| 91麻豆swag| 欧美mv日韩mv国产| 综合欧美亚洲日本| 久草这里只有精品视频| 26uuuu精品一区二区| 一区二区三区在线看| 狠狠网亚洲精品| 91亚洲精品一区二区乱码| 欧美电视剧免费全集观看| 亚洲欧洲另类国产综合| 蜜桃视频免费观看一区| 99久久er热在这里只有精品15 | 精品国产成人在线影院| 亚洲天堂av一区| 精品一区二区免费视频| 欧美日韩亚洲综合一区二区三区| 国产婷婷一区二区| 日韩在线播放一区二区| 99re这里只有精品6| 亚洲精品一区二区三区影院| 亚洲一级二级三级在线免费观看| 国产乱国产乱300精品| 欧美日韩激情一区二区| 综合久久国产九一剧情麻豆| 经典一区二区三区| 欧美日韩国产精品成人| 亚洲精品免费在线观看| 国产成人亚洲精品青草天美| 91精品久久久久久久99蜜桃| 亚洲精品一二三| 国产精品小仙女| 日韩午夜激情视频| 亚洲一区二区精品久久av| 97精品久久久久中文字幕| 国产婷婷色一区二区三区在线| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩国产高清一区二区三区| 亚洲色图视频网| 国产成人av在线影院| 久久综合久久综合久久综合| 秋霞av亚洲一区二区三| 欧美揉bbbbb揉bbbbb| 亚洲乱码国产乱码精品精小说| 高清在线成人网| 久久久久久久久一| 国产麻豆日韩欧美久久| 久久综合久久鬼色中文字| 美女网站一区二区| 欧美日韩黄色影视| 亚洲成av人**亚洲成av**| 欧美影院一区二区三区| 亚洲三级免费观看| 91蜜桃在线观看| 亚洲精品中文在线观看| 欧美系列一区二区| 亚洲mv在线观看| 欧美美女直播网站| 首页亚洲欧美制服丝腿| 欧美一级片在线| 精品在线免费观看| 精品国产乱码久久久久久浪潮| 久草这里只有精品视频| 国产亚洲1区2区3区| 成人中文字幕电影| 成人欧美一区二区三区1314 | 精品日产卡一卡二卡麻豆| 蜜桃免费网站一区二区三区| 精品国产一区二区三区四区四| 轻轻草成人在线| 精品99999| 成人午夜在线视频| 亚洲欧美日韩中文字幕一区二区三区| 99免费精品在线| 亚洲永久免费av| 制服丝袜中文字幕亚洲| 久久丁香综合五月国产三级网站| 久久伊99综合婷婷久久伊| 成人免费视频视频在线观看免费 | 亚洲综合男人的天堂| 欧美视频你懂的| 蜜臀av性久久久久蜜臀aⅴ流畅| 337p粉嫩大胆噜噜噜噜噜91av| 国产99久久久久| 亚洲图片欧美一区| 日韩欧美国产精品一区| 粉嫩一区二区三区在线看 | 激情五月激情综合网| 国产色产综合产在线视频| 91污片在线观看| 天天影视涩香欲综合网| 久久精品人人爽人人爽| 色88888久久久久久影院野外| 欧美a级理论片| 国产精品你懂的在线| 欧美日韩激情一区二区三区| 国产一区二区三区免费| 亚洲激情av在线| 国产精品女同一区二区三区| 国产激情视频一区二区在线观看| 国产精品亚洲а∨天堂免在线| 色香蕉久久蜜桃| 久久综合九色综合97婷婷女人| 99精品在线免费| 日本系列欧美系列| 国产精品视频九色porn| 在线播放欧美女士性生活| 国产精品66部| 亚洲va韩国va欧美va| 亚洲国产成人午夜在线一区| 欧美精品1区2区| 成人免费毛片片v| 视频一区二区中文字幕| 国产精品无人区| 精品国产区一区| 中文字幕高清不卡| 日韩亚洲欧美中文三级| 在线观看视频一区二区| 成人一区二区三区视频|