zoukankan      html  css  js  c++  java
  • 其他高效拷贝文件方式Channel和MappedByteBuffer

    Channel: 它是一个可以读写数据的通道,相当于IO流,但是与IO流有所不同,通道不区分输入和输出(是双向的)

    channel的分类:

      FileChannel 文件通道(用于读写文件)
      SocketChannel TCP协议客户端通道
      ServerSocketChannel TCP协议服务器通道

    FileChannel类的基本使用
    public class ByteBufferCopy {
        public static void main(String[] args) throws Exception {
            FileInputStream fileInputStream = new FileInputStream("111.txt");
            FileOutputStream fileOutputStream = new FileOutputStream("copt.txt");
    
            //获取ByteBuffer
            FileChannel ichannel = fileInputStream.getChannel();
            FileChannel ochannel = fileOutputStream.getChannel();
            //创建Channl
            ByteBuffer allocate = ByteBuffer.allocate(1024);
            int len = 0;
            while ((len = ichannel.read(allocate)) != -1) {
                allocate.flip();
                ochannel.write(allocate);
                allocate.clear();
            }
        }
    }
    FileChannel结合MappedByteBuffer实现高效读写
    public class RandomAccessFiles {
        public static void main(String[] args) throws Exception {
            RandomAccessFile irandomAccessFile = new RandomAccessFile("111.txt", "r");
            RandomAccessFile orandomAccessFile = new RandomAccessFile("copt222.txt", "rw");
            FileChannel ichannel = irandomAccessFile.getChannel();
            FileChannel ochannel = orandomAccessFile.getChannel();
            //
            long size = ichannel.size();
            MappedByteBuffer inMap = ichannel.map(FileChannel.MapMode.READ_ONLY,0,size);
            MappedByteBuffer outMap = ochannel.map(FileChannel.MapMode.READ_WRITE, 0, size);
            //4.复制
            long start = System.currentTimeMillis();
            for (int i = 0; i < size; i++) {
                byte b = inMap.get(i);
                outMap.put(i,b);
            }
            long end = System.currentTimeMillis();
            System.out.println("耗时:" + (end - start));
        }
    }
  • 相关阅读:
    浏览器驱动
    django中的cookie和session
    django自定义中间件实现登陆
    django虚拟环境与文件上传
    了解和熟悉数据库相关知识
    JMeter ---相关脚本笔记
    JMeter脚本---关于时间戳的处理笔记
    JMeter中的读取json数据---JSON Extractor插件
    更多API知识学习
    认识VIM编辑器
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13224889.html
Copyright © 2011-2022 走看看