Java IO流 之 RandomAccessFile 多线程下载
Posted verejava
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java IO流 之 RandomAccessFile 多线程下载相关的知识,希望对你有一定的参考价值。
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 多线程下载的主要内容,如果未能解决你的问题,请参考以下文章