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));
        }
    
    }
  • 相关阅读:
    C#高级特性_Attribute
    C#高级特性_Lambda
    委托(delegate)
    C# 属性、索引
    C#中的interface
    枚举型Enum和结构型Stuct
    javascript学习笔记
    github page 和 hexo 搭建在线博客
    2015/9/22 开通博客园
    phoenix 入门
  • 原文地址:https://www.cnblogs.com/jiefu/p/10041702.html
Copyright © 2011-2022 走看看