content: package com.wm.remusic.proxy;
  
  import android.content.Context;
  import android.util.Log;
  
  import com.wm.remusic.proxy.db.CacheFileInfoDao;
  import com.wm.remusic.proxy.utils.Constants;
  import com.wm.remusic.proxy.utils.HttpUtils;
  import com.wm.remusic.proxy.utils.ProxyFileUtils;
  import com.wm.remusic.proxy.utils.RequestDealThread;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.HttpURLConnection;
  import java.net.MalformedURLException;
  import java.net.URI;
  import java.net.URL;
  
  public class PreLoad extends Thread {
  
      private static final String LOG_TAG = RequestDealThread.class.getSimpleName();
  
      CacheFileInfoDao cacheDao = CacheFileInfoDao.getInstance();
      ProxyFileUtils fileUtils;
      URI uri;
      URL url;
  
      public PreLoad(Context context, String url) {
          try {
              this.url = new URL(url);
          } catch (MalformedURLException e) {
              e.printStackTrace();
          }
          uri = URI.create(url);
          fileUtils = ProxyFileUtils.getInstance(context, uri, false);
      }
  
      public boolean download(int size) {
          try {
              Log.i(LOG_TAG, "缓存开始");
              //
              if (!fileUtils.isEnable()) {
                  return false;
              }
              // 得到文件长度，如果超过缓冲给定长度，则返回
              int fileLength = fileUtils.getLength();
              if (fileLength >= size) {
                  return true;
              }
              // 如果已经下载完成，返回
              System.out.println(fileUtils.getLength() + " " + cacheDao.getFileSize(fileUtils.getFileName()));
              if (fileUtils.getLength() == cacheDao.getFileSize(fileUtils.getFileName())) {
                  return true;
              }
              // 从之前的位置缓存
              HttpURLConnection response = HttpUtils.send(url.openConnection());
              if (response == null) {
                  return false;
              }
              int contentLength = Integer.valueOf(response.getHeaderField(Constants.CONTENT_LENGTH));
              cacheDao.insertOrUpdate(fileUtils.getFileName(), contentLength);
              //
              InputStream data = response.getInputStream();
              byte[] buff = new byte[1024 * 40];
              int readBytes = 0;
              int fileSize = 0;
              while (fileUtils.isEnable() && (readBytes = data.read(buff, 0, buff.length)) != -1) {
                  fileUtils.write(buff, readBytes);
                  fileSize += readBytes;
                  if (fileSize >= size) {
                      break;
                  }
              }
              if (fileUtils.isEnable()) {
                  return true;
              } else {
                  return false;
              }
          } catch (IOException e) {
              Log.e(LOG_TAG, "缓存异常", e);
              return false;
          } finally {
              Log.i(LOG_TAG, "缓存结束");
              ProxyFileUtils.close(fileUtils, false);
          }
      }
  }
  