我记录并测试了10 different ways to read a file in Java,然后通过让它们读取 1KB 到 1GB 的测试文件来相互运行它们。以下是读取 1GB 测试文件最快的 3 种文件读取方法。
请注意,在运行性能测试时,我没有向控制台输出任何内容,因为这确实会减慢测试速度。我只是想测试一下原始阅读速度。
1) java.nio.file.Files.readAllBytes()
在 Java 7、8、9 中测试。总体而言,这是最快的方法。读取 1GB 文件的时间始终不到 1 秒。
import java.io..File;
import java.io.IOException;
import java.nio.file.Files;
public class ReadFile_Files_ReadAllBytes {
public static void main(String [] pArgs) throws IOException {
String fileName = "c:\\temp\\sample-1GB.txt";
File file = new File(fileName);
byte [] fileBytes = Files.readAllBytes(file.toPath());
char singleChar;
for(byte b : fileBytes) {
singleChar = (char) b;
System.out.print(singleChar);
}
}
}
2) java.nio.file.Files.lines()
这已在 Java 8 和 9 中成功测试,但由于缺乏对 lambda 表达式的支持,它无法在 Java 7 中运行。读取一个 1GB 的文件大约需要 3.5 秒,就读取更大的文件而言,它排在第二位。
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.stream.Stream;
public class ReadFile_Files_Lines {
public static void main(String[] pArgs) throws IOException {
String fileName = "c:\\temp\\sample-1GB.txt";
File file = new File(fileName);
try (Stream linesStream = Files.lines(file.toPath())) {
linesStream.forEach(line -> {
System.out.println(line);
});
}
}
}
3) 缓冲读取器
经测试可在 Java 7、8、9 中运行。读取 1GB 测试文件大约需要 4.5 秒。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFile_BufferedReader_ReadLine {
public static void main(String [] args) throws IOException {
String fileName = "c:\\temp\\sample-1GB.txt";
FileReader fileReader = new FileReader(fileName);
try (BufferedReader bufferedReader = new BufferedReader(fileReader)) {
String line;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
}
}
你可以找到所有10种文件读取方法的完整排名here。