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

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

时间: 2024-11-08 22:51:06

Java IO流 之 RandomAccessFile 多线程下载的相关文章

Java IO流 之 RandomAccessFile

http://www.verejava.com/?id=16994711024818 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.RandomAccessFil

【Java IO流】RandomAccessFile类的使用

RandomAccessFile类的使用 RandomAccessFile类是java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. RandomAccessFile类实现步骤 (1)文件模型 第一步要知道,在硬盘上的文件时是以byte byte byte存储的,是数据的集合. (2)打开文件 打开文件硬盘上的文件有两种模式:“rw”(读写),“r”(只读).可以用RandomAccessFile类来指定打开文件的模式,如: RandomAcce

Java IO流学习总结

Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区

Java IO流学习总结(转)

原文地址:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符

Java IO流详尽解析(转自 http://www.2cto.com/kf/201312/262036.html)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

JAVA IO 流的总结

来自http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html,写的很详细 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 [字符流和字节

seall的Java IO流总结

Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区别: 读写单位不同:字节流以

Java IO流详尽解析(大神之作)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流详尽解析

流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流.根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符