上一篇我们介绍了使用java写入到文件,不同io类速度差异较大,本篇我们将介绍从文件读取数据,速度的差异。
测试文件text01.txt,text02.txt,text03.txt, 文件大小均为85938KB, 测试代码:
package com.win.sample;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane.IconifyAction;
public class Trade {
public void readTimeComPare(){
System.out.println("====start======");
useFileIStream();
useBufferIStream();
useBufferReader();
System.out.println("=====end========");
}
// 使用FileInputStream
public void useFileIStream() {
try {
long begin = System.currentTimeMillis();
File file = new File("text01.txt");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int cnt = 0;
while((cnt=fis.read(buffer)) != -1) {
// String bluck = new String(buffer, 0, cnt);
}
fis.close();
System.out.println("=======useFileIStream======= time: " + (System.currentTimeMillis() - begin) + "ms");
} catch (IOException e) {
e.printStackTrace();
}
}
// 使用BufferedInputStream
public void useBufferIStream(){
try {
long begin = System.currentTimeMillis();
File file = new File("text02.txt");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int cnt = 0;
while((cnt=bis.read(buffer)) != -1) {
// String bluck = new String(buffer, 0, cnt);
}
bis.close();
System.out.println("=====BufferIStream===== time: " + (System.currentTimeMillis() - begin) + "ms");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//使用BufferedReader
public void useBufferReader(){
try {
long begin = System.currentTimeMillis();
File file = new File("text03.txt");
BufferedReader bReader = new BufferedReader(new FileReader(file));
int cnt = 0;
char[] buffer = new char[1024];
while((cnt = bReader.read(buffer)) != -1) {
// String lintxt = new String(buffer, 0, cnt);
}
bReader.close();
System.out.println("====BufferReader====== time: " + (System.currentTimeMillis() - begin) + "ms");
} catch (Exception e) {
e.printStackTrace();
}
}
测试结果如下:
====start======
=======useFileIStream======= time: 105ms
=====BufferIStream===== time: 42ms
====BufferReader====== time: 216ms
=====end========
可以看出使用BufferedInputStream读取速度最快,反倒BufferedReader是最慢的。