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));
        }
    
    }
  • 相关阅读:
    IIS与ASP.NET中的线程池
    IIS与ASP.NET中的队列
    让ASP.NET OutputCache使用http.sys kernel-mode cache
    微软的坑:Url重写竟然会引起IIS内核模式缓存不工作
    实际案例:在现有代码中通过async/await实现并行
    困扰多日的C#调用Haskell问题竟然是Windows的一个坑
    C#调用haskell遭遇Attempted to read or write protected memory
    经过实际验证的C#调用Haskell的方法
    Haskell中cabal install glib遇到的问题
    Haskell ghci中调用pandoc的API进行markdown转换
  • 原文地址:https://www.cnblogs.com/jiefu/p/10041702.html
Copyright © 2011-2022 走看看