Java代码
import java.io.*;
class DownThread
extends Thread {
private final int BUFF_LEN =
32;
private long start;
private long end;
private InputStream is;
private RandomAccessFile raf;
public DownThread(
long start,
long end, InputStream is, RandomAccessFile raf) { System.out.println(start +
"---->" + end);
this.start = start;
this.end = end;
this.is = is;
this.raf = raf; }
public void run() {
try { is.skip(start); raf.seek(start);
byte[] buff =
new byte[BUFF_LEN];
long contentLen = end - start;
long times = contentLen / BUFF_LEN +
4;
int hasRead =
0;
for (
int i =
0; i < times; i++) { hasRead = is.read(buff);
if (hasRead <
0) {
break; } raf.write(buff,
0, hasRead); } }
catch (Exception ex) { ex.printStackTrace(); }
finally {
try {
if (is !=
null) { is.close(); }
if (raf !=
null) { raf.close(); } }
catch (Exception ex) { ex.printStackTrace(); } } } }
public class MutilDown {
public static void main(String[] args) {
final int DOWN_THREAD_NUM =
4;
final String OUT_FILE_NAME =
"d:/copy勇敢的心.rmvb"; InputStream[] isArr =
new InputStream[DOWN_THREAD_NUM]; RandomAccessFile[] outArr =
new RandomAccessFile[DOWN_THREAD_NUM];
try { isArr[
0] =
new FileInputStream(
"d:/勇敢的心.rmvb");
long fileLen = getFileLength(
new File(
"d:/勇敢的心.rmvb")); System.out.println(
"文件的大小" + fileLen); outArr[
0] =
new RandomAccessFile(OUT_FILE_NAME,
"rw");
for (
int i =
0; i < fileLen; i++) { outArr[
0].write(
0); }
long numPerThred = fileLen / DOWN_THREAD_NUM;
long left = fileLen % DOWN_THREAD_NUM;
for (
int i =
0; i < DOWN_THREAD_NUM; i++) {
if (i !=
0) { isArr[i] =
new FileInputStream(
"d:/勇敢的心.rmvb"); outArr[i] =
new RandomAccessFile(OUT_FILE_NAME,
"rw"); }
if (i == DOWN_THREAD_NUM -
1) {
new DownThread(i * numPerThred, (i +
1) * numPerThred + left, isArr[i], outArr[i]).start(); }
else {
new DownThread(i * numPerThred, (i +
1) * numPerThred, isArr[i], outArr[i]).start(); } } }
catch (Exception ex) { ex.printStackTrace(); } }
public static long getFileLength(File file) {
long length =
0;
long size = file.length(); length = size;
return length; } }
转载于:https://www.cnblogs.com/J2EEPLUS/archive/2012/05/07/2488008.html
相关资源:VC 多线程文件读写操作实例