• 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));
        }
    
    }
  • 相关阅读:
    tip
    tip
    paper clip 使用
    这个菜单有点cool
    jqueryoptiontree plugin introduce by frederick.mao
    ruby语法不理解
    近来心得,心不可太贪,见好就收
    XPCOM的有关链接
    rails router
    rails3高端observer模式
  • 原文地址:https://www.cnblogs.com/jiefu/p/10041702.html
Copyright © 2020-2023  润新知