Я использую следующие 2 кода для чтения большого файла.
Это с использованием FileReader
:
File file = new File("/Users/Desktop/shakes.txt");
FileReader reader = new FileReader(file);
int ch;
long start = System.currentTimeMillis();
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
long end = System.currentTimeMillis();
и последующим использованием BufferedReader
:
File file = new File("/Users/Desktop/shakes.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
int ch;
long start = System.currentTimeMillis();
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
long end = System.currentTimeMillis();
В соответствии с документацией для BufferedReader
:
Поэтому рекомендуется обернуть BufferedReader вокруг любого Reader, чьи операции read () могут быть дорогостоящими, например FileReaders и InputStreamReaders.Без буферизации каждый вызов read () или readLine () может привести к тому, что байты будут считаны из файла, преобразованы в символы и затем возвращены, что может быть очень неэффективно.
С учетом этой документации иразмер буфера по умолчанию 8192 класса BufferedReader, разве общее время чтения файла с BufferedReader не должно быть быстрее?В настоящее время обе части кода работают на моей машине в течение ~ 3000 мс.Однако если я использую readLine в BufferedReader, производительность существенно улучшится (~ 200 мс).
Мысли о чем-то, что мне не хватает?Не ожидается ли, что даже с методом read () BufferedReader будет давать лучшую производительность, чем чтение из FileReader?