#java #парсер
Есть лог файл в текстовом формате, весом 4gb. Структура файла - это N строк весом примерно 200 байт. Необходимо получать строки (добавлять их в массив), в которых есть ключевое слово. Очень важна скорость получения информации. На данный момент реализовано следующим образом: public ListreadFileByFilter(String fileName, String filter) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(fileName)); ArrayList list = new ArrayList<>(); while (reader.ready()) { String tmp = reader.readLine(); if (tmp.matches(".*"+ filter +".*")) { list.add(tmp); } } reader.close(); return list; } Подскажите, есть ли возможность сделать производительней (быстрей) данный участок кода?
Ответы
Ответ 1
Строка if (tmp.matches(".*"+ filter +".*")) { вызываемая в цикле, это уникальнейший провал производительности На каждой итерации цикла конструируется новая строка Используется регулярное выражение вместо простого поиска по тексту Замените эту строку на if (tmp.contains(filter)) {
Комментариев нет:
Отправить комментарий