多线程读写文件Demo



import java.io.*;

public class Demo {

    static int threadNum = 3;

    public static void main(String[] args) throws Throwable {
        for (int i = 0; i < threadNum; i++) {
            RandomAccessFile rafReader = new RandomAccessFile("C:\\Users\\Administrator\\Desktop\\test.zip", "rw");

            RandomAccessFile rafWriter = new RandomAccessFile("C:\\Users\\Administrator\\Desktop\\raftest.zip", "rwd");
            //        共 25 字节 取1/3
            long length = rafReader.length();
            long splice = length / threadNum;
            rafWriter.setLength(length);

            Long startIndex = i * splice;
            Long endIndex = (i + 1) * splice-1;
            Long total = endIndex -startIndex;
            if (i == threadNum - 1) {
                // 代表最后一个线程
                endIndex = length - 1;
            }
            Long finalEndIndex = endIndex;
            new Thread(() -> {
                try {
                    rafReader.seek(startIndex);
                    rafWriter.seek(startIndex);
                    byte[] bytes = new byte[1024];
                    int len = 0;
                    while ((len = rafReader.read(bytes)) != -1) {
                        if(len>total){
                            break;
                        }
                        rafWriter.write(bytes, 0, len);
                    }
                    rafReader.close();
                    rafWriter.close();
                    System.out.println("当前线程:" + Thread.currentThread().getName() + " start:" + startIndex + " end:" + finalEndIndex+"  文件总大小:"+length/1024 +"KB");
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (rafReader != null) {
                        try {
                            rafReader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (rafWriter != null) {
                        try {
                            rafWriter.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }
            }).start();


        }


    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值