java的http断点续传原理(二)
来源:优易学  2011-12-11 17:10:41   【优易学:中国教育考试门户网】   资料下载   IT书店

  //获得文件长度

  public long getFileSize()

  {

  int nFileLength = -1;

  try{

  URL url = new URL(siteInfoBean.getSSiteURL());

  HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection ();

  httpConnection.setRequestProperty("User-Agent","NetFox");

  int responseCode=httpConnection.getResponseCode();

  if(responseCode>=400)

  {

  processErrorCode(responseCode);

  return -2; //-2 represent access is error

  }

  String sHeader;

  for(int i=1;;i++)

  {

  //DataInputStream in = new DataInputStream(httpConnection.getInputStream ());

  //Utility.log(in.readLine());

  sHeader=httpConnection.getHeaderFieldKey(i);

  if(sHeader!=null)

  {

  if(sHeader.equals("Content-Length"))

  {

  nFileLength = Integer.parseInt(httpConnection.getHeaderField(sHeader));

  break;

  }

  }

  else

  break;

  }

  }

  catch(IOException e){e.printStackTrace ();}

  catch(Exception e){e.printStackTrace ();}

  Utility.log(nFileLength);

  return nFileLength;

  }

  //保存下载信息(文件指针位置)

  private void write_nPos()

  {

  try{

  output = new DataOutputStream(new FileOutputStream(tmpFile));

  output.writeInt(nStartPos.length);

  for(int i=0;i<nStartPos.length;i++)

  {

  // output.writeLong(nPos[i]);

  output.writeLong(fileSplitterFetch[i].nStartPos);

  output.writeLong(fileSplitterFetch[i].nEndPos);

  }

  output.close();

  }

  catch(IOException e){e.printStackTrace ();}

  catch(Exception e){e.printStackTrace ();}

  }

  //读取保存的下载信息(文件指针位置)

  private void read_nPos()

  {

  try{

  DataInputStream input = new DataInputStream(new FileInputStream(tmpFile));

  int nCount = input.readInt();

  nStartPos = new long[nCount];

  nEndPos = new long[nCount];

  for(int i=0;i<nStartPos.length;i++)

  {

  nStartPos[i] = input.readLong();

  nEndPos[i] = input.readLong();

  }

  input.close();

  }

  catch(IOException e){e.printStackTrace ();}

  catch(Exception e){e.printStackTrace ();}

  }

  private void processErrorCode(int nErrorCode)

  {

  System.err.println("Error Code : " + nErrorCode);

  }

  //停止文件下载

  public void siteStop()

  {

  bStop = true;

  for(int i=0;i<nStartPos.length;i++)

  fileSplitterFetch[i].splitterStop();

  }

  }

  /*

  **FileSplitterFetch.java

  */

  package NetFox;

  import java.io.*;

  import java.net.*;

  public class FileSplitterFetch extends Thread {

  String sURL; //File URL

  long nStartPos; //File Snippet Start Position

  long nEndPos; //File Snippet End Position

  int nThreadID; //Thread's ID

  boolean bDownOver = false; //Downing is over

  boolean bStop = false; //Stop identical

  FileAccessI fileAccessI = null; //File Access interface

  public FileSplitterFetch(String sURL,String sName,long nStart,long nEnd,int id) throws IOException

  {

  this.sURL = sURL;

  this.nStartPos = nStart;

  this.nEndPos = nEnd;

  nThreadID = id;

  fileAccessI = new FileAccessI(sName,nStartPos);

  }

  public void run()

  {

  while(nStartPos < nEndPos && !bStop)

  {

  try{

  URL url = new URL(sURL);

  HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection ();

  httpConnection.setRequestProperty("User-Agent","NetFox");

  String sProperty = "bytes="+nStartPos+"-";

  httpConnection.setRequestProperty("RANGE",sProperty);

  Utility.log(sProperty);

  InputStream input = httpConnection.getInputStream();

  //logResponseHead(httpConnection);

  byte[] b = new byte[1024];

  int nRead;

[1] [2] [3] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训