高性能文件拷贝

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();
        }
    }
}
相关推荐
biter down24 分钟前
C++ 函数重载:从概念到编译原理
开发语言·c++
yue0082 小时前
C# winform自定义控件
开发语言·c#
JANGHIGH2 小时前
c++ 多线程(三)
开发语言·c++
2503_928411562 小时前
12.9 Vue3+Vuex+Js+El-Plus+vite(项目搭建)
开发语言·javascript·ecmascript
卓码软件测评2 小时前
第三方软件验收评测机构【Gatling安装指南:Java环境配置和IDE插件安装】
java·开发语言·ide·测试工具·负载均衡
weixin_307779132 小时前
Jenkins中的Jakarta Activation API插件:功能、使用与最佳实践
运维·开发语言·ci/cd·自动化·jenkins
weixin_439930642 小时前
前端js日期计算跨月导致的错误
开发语言·前端·javascript
liu****3 小时前
9.二叉树(一)
c语言·开发语言·数据结构·算法·链表
她说..3 小时前
Spring AOP场景2——数据脱敏(附带源码)
java·开发语言·java-ee·springboot·spring aop
sunly_3 小时前
Flutter:showModalBottomSheet底部弹出完整页面
开发语言·javascript·flutter