NIO(JSR 51 NIO.1)的性能测试

原创 2013年12月02日 19:41:24
原来的io已经用新io重新实现过。对于读写文件,看到很多人都推荐使用new io,说什么速度快。我做一下测试。

本测试读写的文件的大小是2M字节多一点。

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.file.Paths;

/**
 * @ 测试结论:只要缓冲大小设置得当,使用旧io和基本类型写的IO是最快的。
 * @author jdgdf566
 */
public class NewMain {

    private static int commonIObuffer = 1024 * 32;

    /**
     * nio内存映射
     *
     * @throws IOException
     */
    public static void mapChannel() throws IOException {
        FileInputStream in = new FileInputStream("Java NIO (JSR 51 NIO.1)中文版.pdf");
        long size = in.available();
        RandomAccessFile out = new RandomAccessFile(Double.toString(Math.random()), "rw");
        FileChannel inc = in.getChannel();
        MappedByteBuffer bf = inc.map(FileChannel.MapMode.READ_ONLY, 0, size);
        FileChannel outc = out.getChannel();
        MappedByteBuffer outbf = outc.map(FileChannel.MapMode.READ_WRITE, 0, size);
        outbf.put(bf);
        inc.close();
        outc.close();
        in.close();
        out.close();
    }

    /**
     * 原io
     *
     * @throws IOException
     */
    public static void commonIO() throws Exception {
        NewMain.fileToStream("Java NIO (JSR 51 NIO.1)中文版.pdf", new FileOutputStream(Double.toString(Math.random())));
    }

    public static int fileToStream(String path, OutputStream out) throws Exception {

        int bufferSize = commonIObuffer;
        FileInputStream fis = new FileInputStream(path);
        //ba文件写入liu
        int dataSize = 0;
        int len;
        byte[] bs = new byte[bufferSize];
        while ((len = fis.read(bs)) != -1) {
            out.write(bs, 0, len);
            dataSize += len;
        }
        out.flush();
        return dataSize;
    }

    /**
     * nio
     *
     * @throws IOException
     */
    public static void channel_transferTo() throws Exception {
        String path = "F:\\NetBeansProjects\\JavaApplicationTest\\src\\Java NIO (JSR 51 NIO.1)中文版.pdf";
        //String outpath = "F:\\NetBeansProjects\\JavaApplicationTest\\src/0.2974592999005251";
        FileChannel fileChannel = FileChannel.open(Paths.get(path));
        fileChannel.transferTo(0, fileChannel.size(), Channels.newChannel(new BufferedOutputStream(new FileOutputStream(Double.toString(Math.random())), commonIObuffer)));
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        // TODO code application logic here
        long t1 = System.currentTimeMillis();
        //NewMain.mapChannel();
        //NewMain.commonIO();
        //NewMain.channel_transferTo();

        long t2 = System.currentTimeMillis();
        System.out.println(t2 - t1);
    }
}

测试结论:只要缓冲大小设置得当,使用旧io和基本类型写的IO是最快的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

js 正则表达式 判断是否是纯数字

妈蛋  不想学js了  最讨厌写总结了 今天哥哥qiang

网络编程中阻塞与非阻塞,同步与异步、I/O模型的理解

1. 概念理解      在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发...

tomcat bio nio apr 模式性能测试与个人看法

11.11活动当天,服务器负载过大,导致部分页面出现了不可访问的状态、那后来主管就要求调优了,下面是tomcat bio、nio、apr模式以及后来自己测试的一些性能结果。原理方面的资料都是从网上找的...

java对比IO和NIO的文件读写性能测试

java对比IO和NIO的文件读写性能测试 源代码下载地址:http://www.zuidaima.com/share/1550463508466688.htm...

性能测试知多少<http://www.51testing.com/html/42/n-815642.html>

从这一篇开始,虫师向性能方面发力。翻看自己的博客,最早的时候热衷于jmeter,于是写了几篇图文并茂的文章(其实,主要是操作截图加文字描述),之后,由于看到好多朋友关于性能的知识什么都不知道,下载个l...
  • he_jian1
  • he_jian1
  • 2012年06月15日 11:41
  • 11879

ab测试tomcat并发性能(测试BIO与NIO差别)(一)

首次使用ab做并发能力的测试 servier.XML配置如下,使用tomcat默认的BIO模式:  "HTTP/1.1"  maxThreads="10000" acceptCount="5000...

性能测试进阶1

  • 2013年08月22日 10:20
  • 724KB
  • 下载

性能测试-1jmeter的安装配置

JDKjmeter的运行依赖于JDK,所以需要先安装配置JDK,具体可参见文章: 下载安装http://blog.csdn.net/qq_15792013/article/details/591030...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NIO(JSR 51 NIO.1)的性能测试
举报原因:
原因补充:

(最多只允许输入30个字)