您的位置:首页 > 编程语言 > Java开发

java用RandomAccessFile实现多线程下载

2013-08-08 13:55 441 查看
利用RandomAccessFile实现文件的多线程下载,即多线程下载一个文件时,将文件分成几块,每块用不同的线程进行下载。下面是一个利用多线程在写文件时的例子,其中预先分配文件所需要的空间,然后在所分配的空间中进行分块,然后写入:

[java] view plaincopy

import java.io.FileNotFoundException;  

import java.io.IOException;  

import java.io.RandomAccessFile;  

  

/** 

 * 测试利用多线程进行文件的写操作 

 */  

public class RandomAccess{  

  

    public static void main(String[] args) throws Exception {  

        // 预分配文件所占的磁盘空间,磁盘中会创建一个指定大小的文件  

        RandomAccessFile raf = new RandomAccessFile("D://abc.txt", "rw");  

        raf.setLength(1024*1024); // 预分配 1M 的文件空间  

        raf.close();  

          

        // 所要写入的文件内容  

        String s1 = "第一个字符串";  

        String s2 = "第二个字符串";  

        String s3 = "第三个字符串";  

        String s4 = "第四个字符串";  

        String s5 = "第五个字符串";  

          

        // 利用多线程同时写入一个文件  

        new FileWriteThread(1024*1,s1.getBytes()).start(); // 从文件的1024字节之后开始写入数据  

        new FileWriteThread(1024*2,s2.getBytes()).start(); // 从文件的2048字节之后开始写入数据  

        new FileWriteThread(1024*3,s3.getBytes()).start(); // 从文件的3072字节之后开始写入数据  

        new FileWriteThread(1024*4,s4.getBytes()).start(); // 从文件的4096字节之后开始写入数据  

        new FileWriteThread(1024*5,s5.getBytes()).start(); // 从文件的5120字节之后开始写入数据  

    }  

      

    // 利用线程在文件的指定位置写入指定数据  

    static class FileWriteThread extends Thread{  

        private int skip;  

        private byte[] content;  

          

        public FileWriteThread(int skip,byte[] content){  

            this.skip = skip;  

            this.content = content;  

        }  

          

        public void run(){  

            RandomAccessFile raf = null;  

            try {  

                raf = new RandomAccessFile("D://abc.txt", "rw");  

                raf.seek(skip);  

                raf.write(content);  

            } catch (FileNotFoundException e) {  

                e.printStackTrace();  

            } catch (IOException e) {  

                // TODO Auto-generated catch block  

                e.printStackTrace();  

            } finally {  

                try {  

                    raf.close();  

                } catch (Exception e) {  

                }  

            }  

        }  

    }  

  

}  

阅读(12) | 评论(0) | 转发(0) |

0
上一篇:验证码识别部分代码

下一篇:java 中RandomAccessFile的使用

相关热门文章
pthread线程的终止退出 | 线程...

kthreadd 分析

windows 下找到主线程ID

如何在linux 下c++中类的成员...

线程同步机制(1)---无名信号...

JDK1.6官方下载_JDK6官方下载_...

MyEclipse6.5下载及注册码...

Eclipse+MyEclipse的配置

Eclipse 插件安装、升级和卸载...

最新版SWT Designer 6.0 安装,...

那一台服务器也没5T的存储空间...

公司有5T的数据用于下载,数据...

CACTI监控ESXI中的虚拟机,监...

如何挂载一块以前做过LVM的硬...

做主主同步,只同步个别的几张...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: