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(); } } } }}