高性能文件拷贝

java 复制代码
package cn.itcast.nio.c3;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class TestFileChannelTransferTo {
    public static void main(String[] args) {
        try (
                FileChannel from = new FileInputStream("data.txt").getChannel();
                FileChannel to = new FileOutputStream("to.txt").getChannel();
        ) {
            from.transferTo(0, from.size(), to);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

NIO文件流拷贝文件

使用零拷贝

这样写法有问题 transferTo 方法最多只能传输2G的文件

进行优化代码

java 复制代码
package cn.itcast.nio.c3;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class TestFileChannelTransferTo {
    public static void main(String[] args) {
        try (
                FileChannel from = new FileInputStream("data.txt").getChannel();
                FileChannel to = new FileOutputStream("to.txt").getChannel();
        ) {
            // 效率高,底层会利用操作系统的零拷贝进行优化, 2g 数据
            long size = from.size();
            // left 变量代表还剩余多少字节
            for (long left = size; left > 0; ) {
                System.out.println("position:" + (size - left) + " left:" + left);
                left -= from.transferTo((size - left), left, to);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
相关推荐
止水编程 water_proof4 分钟前
JavaScript基础
开发语言·javascript·ecmascript
小小测试开发30 分钟前
JMeter JSR223预处理程序高级用法:解锁自动化测试的灵活性上限
开发语言·jmeter·groovy
星释44 分钟前
Rust 练习册 22:映射函数与泛型的威力
开发语言·rust·机器人
云泽8081 小时前
C++ List 容器详解:迭代器失效、排序与高效操作
开发语言·c++·list
云帆小二1 小时前
从开发语言出发如何选择学习考试系统
开发语言·学习
光泽雨2 小时前
python学习基础
开发语言·数据库·python
百***06012 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
jghhh013 小时前
基于幅度的和差测角程序
开发语言·matlab
fruge3 小时前
自制浏览器插件:实现网页内容高亮、自动整理收藏夹功能
开发语言·前端·javascript