最近两天在看NIO相关资料,网上一致认为NIO效率比BIO高很多,所以今天写个代码测试验证下。
从一个文本文件读取数据:189270KB,查看下两者操作时间。
上代码:
package com.whereta.file;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* Vincent 创建于 2016/5/13.
*/
public class RandomAccessFileDemo {
public static void main(String[] args) throws IOException {
long l1 = System.currentTimeMillis();
String filePath = "error.log";
try (
BufferedReader bufferedReader=new BufferedReader(new FileReader(filePath));
) {
String s = bufferedReader.readLine();
while (s != null) {
// System.out.println(s);
s = bufferedReader.readLine();
}
}
long l2 = System.currentTimeMillis();
try (RandomAccessFile file = new RandomAccessFile(filePath, "r");
) {
FileChannel channel = file.getChannel();
ByteBuffer buf = ByteBuffer.allocate(8192);
int length = channel.read(buf);
while (length!=-1){
buf.flip();
byte[] array = buf.array();
// System.out.println(new String(array,0,length));
length = channel.read(buf);
}
}
long l3 = System.currentTimeMillis();
System.out.println("----------------");
System.out.println(l2-l1);
System.out.println(l3-l2);
}
}
输出:
----------------
698
290
BIO使用缓冲方式读取数据,默认缓冲区大小都是8192byte,从输出可以看出NIO还是有优势的