码迷,mamicode.com
首页 > 其他好文 > 详细

NIO(五)

时间:2018-11-30 00:39:03      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:exce   style   stat   input   static   throws   mit   new   print   

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

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));
    }

}

 

NIO(五)

标签:exce   style   stat   input   static   throws   mit   new   print   

原文地址:https://www.cnblogs.com/cppdy/p/10041702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!