码迷,mamicode.com
首页 > 数据库 > 详细

Java IO流 之 RandomAccessFile 多线程下载

时间:2018-06-26 11:03:25      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:一个   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 多线程下载

标签:一个   water   thread   ide   rac   get   TE   etl   rri   

原文地址:https://www.cnblogs.com/verejava/p/9227225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!