zoukankan      html  css  js  c++  java
  • NIO(四)

    使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别

    1、创建非直接缓冲区测试类

    package com.cppdy.nio;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    //使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别
    public class NIOBufferDemo3 {
    
        public static void main(String[] args) throws Exception {
    
            long start = System.currentTimeMillis();
            FileInputStream fis = new FileInputStream("F:\cppdy\1.mp4");
            FileOutputStream fos = new FileOutputStream("F:\cppdy\2.mp4");
    
            FileChannel inChannel = fis.getChannel();
            FileChannel outChannel = fos.getChannel();
    
            ByteBuffer buf = ByteBuffer.allocate(1024);
            while (inChannel.read(buf) != -1) {
                buf.flip();
                outChannel.write(buf);
                buf.clear();
            }
    
            outChannel.close();
            inChannel.close();
            fos.close();
            fis.close();
    
            long end = System.currentTimeMillis();
            System.out.println("使用非直接缓冲区复制完毕mp4,耗时:" + (end - start));
    
        }
    
    }

    2、创建直接缓冲区测试类

    package com.cppdy.nio;
    
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.channels.FileChannel.MapMode;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    
    //使用非直接缓冲区和直接缓冲区复制同一个文件,看一下时间差别
    public class NIOBufferDemo4 {
    
        public static void main(String[] args) throws Exception {
    
            long start = System.currentTimeMillis();
            // 直接缓冲区
            FileChannel inChannel = FileChannel.open(Paths.get("F:\cppdy\1.mp4"), StandardOpenOption.READ);
            FileChannel outChannel = FileChannel.open(Paths.get("F:\cppdy\2.mp4"), StandardOpenOption.READ,
                    StandardOpenOption.WRITE, StandardOpenOption.CREATE);
            // 缓冲区
            MappedByteBuffer inMap = inChannel.map(MapMode.READ_ONLY, 0, inChannel.size());
            MappedByteBuffer outMap = outChannel.map(MapMode.READ_WRITE, 0, inChannel.size());
    
            // 直接对缓冲区进行数据读写操作
            byte[] bytes = new byte[inMap.limit()];
    
            inMap.get(bytes);
            outMap.put(bytes);
            outMap.clear();
            outChannel.close();
            inChannel.close();
            long end = System.currentTimeMillis();
            System.out.println("使用直接缓冲区复制完毕mp4,耗时:" + (end - start));
        }
    
    }
  • 相关阅读:
    金蝶问题:不能保存已审核的单据
    在代码中设置cxTreeList按多列排序
    日积月累篇:生产任务单
    sp_reset_connection
    日积月累篇:仓库流程
    使用FreeMarker生成Word文档 仅此而已
    ASP格式化时间日期(二)
    省市区三级联动连接数据库
    利用SQL语句进行添加、删除、修改字段,表与字段的基本操作,数据库备份等
    ASP截取字数(二)
  • 原文地址:https://www.cnblogs.com/jiefu/p/10041702.html
Copyright © 2011-2022 走看看