直接贴出代码
/***********************************************************************
* Module: DownloadConnection.java
* Author: Administrator
* Purpose: Defines the Class DownloadConnection
***********************************************************************/
package com.tiny.httpdemo;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import lan.Log;
/**
* 这个下载连接类主要采用的方式是 将文件大小进行分块然后 并且有序下载
* 主要的目的是为了让一次下载的数量不要过于的大 以避免io阻塞
* 若要实现断点续传本程序的改进应该是很方便的
* 记住lastSize 既可以立马进行分解
* @author sada
*
*/
public class DownloadConnection {
// private static final String mtempurl = "http://219.138.125.22/myweb/mp3/CMP3/JH19.MP3";
private static final String mtempurl = "http://file16.top100.cn/201105110911/AA5CC27CBE34DEB50A194581D1300881/Special_323149/%E8%8D%B7%E5%A1%98%E6%9C%88%E8%89%B2.mp3";
public static void main(String[] args) {
DownloadConnection dConnection = new DownloadConnection(mtempurl, 0);
dConnection.download(mtempurl);
}
/** TAG */
private static final String TAG = "Sada.DownloadConnection";
/** 用于操作下载暂停,写本地文件时候跳出写循环的标志 */
private boolean stop;
/** 下载的文件的总长度 */
private int totalSize;
/** 如果是继续下载,lastSize表示上次已经下载的长度 */
private int lastSize;
/** 當前下載數據塊已下載數據大小,该变量会在写循环中增加*/
private int currSize;
/** 当前需要下载的文件大小,用于继续下载时,写循环的结束标志 */
private int contentLength;
/** 最大塊大小1MB */
private static final int MAX_SIZE_ONE_MEGA = 1024 * 1024;
private int lastloadsize = 0; //已传的偏移
private int currloadsize = 0; //还要传得偏移
private int con