Java IO流 之 RandomAccessFile 多线文件拷贝

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

		}

	}
}



Easy Learning Java


Easy Learning Design Patterns Java Practice


Easy Learning Data Structures & Algorithms Java Practice


Java Parsing Collection XML JSON


Easy Learning JDBC + MySQL


Easy Learning Javascript


Easy Learning Design Patterns Javascript


Easy Learning Design Patterns ES6+ Javascript


Easy Learning Data Structures & Algorithms Javascript


Easy Learning Data Structures & Algorithms ES6+Javascript


Easy Learning Oracle SQL


Easy Learning JDBC + Oracle


Easy Learning Python 3


Easy Learning Data Structures & Algorithms Python 3


Easy Learning Design Patterns Python 3


Easy Learning HTML CSS


Easy Learning MySQL SQL


Easy Learning C#


Easy Learning Data Structures & Algorithms C#


Easy Learning C


Easy Learning Data Structures & Algorithms C


Easy Learning Data Structures & Algorithms C++

Java IO流 之 RandomAccessFile 多线文件拷贝