- package com.randomaccessfile;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.RandomAccessFile;
- public class TestThreadDownload
- { public static void main(String[] args)
- {
- try
- {
- InputStream is=new FileInputStream(new File("res/raf/water.jpg"));
- long contentLength=is.available();
- // 创建一个跟要下载的文件同大小的文件
- RandomAccessFile raf=new RandomAccessFile(new File("res/raf/new2.jpg"),"rw");
- raf.setLength(contentLength);
- raf.close();
- // 计算每段要下载多长
- long earchLength=contentLength/5;
- if(contentLength%5!=0)
- {
- earchLength++;
- }
- for(int i=0;i<5;i++)
- {
- new Thread(new DownloadThread(earchLength,i)).start();
- }
- } catch (FileNotFoundException e)
- {
- e.printStackTrace();
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- static class DownloadThread implements Runnable
- {
- private long earchLength;
- private int i;
- public DownloadThread(long earchLength,int i)
- {
- this.earchLength=earchLength;
- this.i=i;
- }
- @Override
- public void run()
- {
- RandomAccessFile raf=null;
- try
- {
- InputStream is=new FileInputStream(new File("res/raf/water.jpg"));
- long skip=earchLength*i;
- is.skip(skip);
- raf = new RandomAccessFile(new File("res/raf/new2.jpg"),"rw");
- raf.seek(skip);
- int l=0;
- System.out.println(raf.getFilePointer());
- while((raf.getFilePointer()<=skip+earchLength)&&((l=is.read())!=-1))
- {
- raf.write(l);
- }
- } catch (FileNotFoundException e)
- {
- e.printStackTrace();
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- finally
- {
- try
- {
- raf.close();
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
- }
来源: http://www.bubuko.com/infodetail-2659876.html