Я задокументировал и протестировал 10 различных способов чтения файлов в Java , а затем применил их друг к другу, заставив их читать в тестовых файлах от 1 КБ до 1 ГБ.Вот 3 самых быстрых метода чтения файлов для чтения тестового файла объемом 1 ГБ.
Обратите внимание, что при выполнении тестов производительности я ничего не выводил на консоль, поскольку это действительно замедляло бы тестирование.Я просто хотел проверить скорость чтения в исходном формате.
1) java.nio.file.Files.readAllBytes ()
Протестировано в Java 7, 8, 9. В целом это был самый быстрый метод,Чтение файла объемом 1 ГБ всегда было менее 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, но этоне будет работать в Java 7 из-за отсутствия поддержки лямбда-выражений.Чтение файла размером 1 ГБ заняло около 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) BufferedReader
Протестировано для работы в Java 7, 8, 9. Это заняло около 4,5 секунд, чтобы прочитать в тестовом файле 1 ГБ.
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 методов чтения файлов здесь .