標籤:一個 water thread ide rac get TE etl rri
http://www.verejava.com/?id=16994721196019
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.verejava.com/?id=16994721196019
Java IO流 之 RandomAccessFile 多線程下載