Therapyx
@Therapyx
Data Science

BufferedReader или Scanner?

Доброго вечера. Достаточно прогуглил уже и нигде не нашел 1го конкретного мнения или приведенных конкретных чисел.
Что же все таки лучше использовать для считывания и сплита текстовых(к примеру CSV) фаилов огромного размера
Банальный пример кода:
String filePath = "C:/test.csv";
		InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "UTF-8");
		BufferedReader br = new BufferedReader(isr);
		String line;
		while((line = br.readLine()) != null) {
			String[] splited = line.split("\t");
			for (int i = 0; i < splited.length; i++) {
				System.out.println(splited[i]);
			}
		}

Или же лучше будет со сканером? и почему?
п.с. К сожалению в ближайшие пару дней не буду располагать фаилами для тестов. Может кто-то уже это делал тут? :)

ОТВЕТ = Замерил даже с не очень большим фаилом. Получилось следующее
BufferedReader = 80 miliseconds
Scanner = 400 miliseconds.
В общем для парса больших данных ответ очевиден....
  • Вопрос задан
  • 5022 просмотра
Решения вопроса 2
Сейчас, по скорости они практически одинаковы.
Однако у Scanner есть методы useDelimiter(Pattern)иfindInLine(Pattern), которые позволяют моментально искать разделители, поэтому для
.csv файлов лучше использовать его.
А вообще, зачем изобретать велосипед, если есть замечательные
библиотеки Apache Commons CSV или opencsv?
Ответ написан
EugeneP2
@EugeneP2
Java Dev
Судя из исходников, Scanner-е есть буферизация + много удобных методов для чтения текста. Но вам никто не мешает сделать вот так

InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "UTF-8");
    BufferedReader br = new BufferedReader(isr);

Scanner scanner = new Scanner(br);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@asd111
Самый быстрый способ парсить большие файлы - C++ boost memory maped file + парсер на boost spirit
https://habrahabr.ru/post/246257/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы