Я хочу использовать что-то вроде BufferedReader для чтения строк из файла, но если последняя строка в файле не заканчивается символом новой строки, я бы хотел, чтобы его игнорировали. Стандартный BufferedReader вернет последнюю строку до EOF, чего я не хочу. Пока что самое лучшее, что я придумал, это скопировать источник BufferedReader, изменить одну строку об обработке EOF и называть его чем-то вроде BufferedCompleteLineReader. Однако это не очень хорошо. Кто-нибудь имеет лучшую идею?изменен BufferedReader игнорировать последнюю строку
В фоновом режиме есть несколько читателей, которые делают запросы на чтение файла, который периодически добавляется с новой строкой текста (т. Е. Файл журнала), но каждая новая строка действительна только в том случае, если она заканчивается символом новой строки. Если я прочитаю последнюю строку во время ее изменения, я получу плохие данные. Но я не хочу навязывать файловую блокировку, потому что производительность важнее для меня, чем полнота (для читателя).
Я думал об этом изначально, но BufferedReader.readLine() достаточно сложный, так что я бы в конечном итоге полностью копировал большую часть класса, потому что мне нужна буферизация. Кроме того, я думаю, что добавление ограничения на подкласс нарушает принцип замены Лискова ... это не будет самозахватом, но это добавляет проблемы. – David
Вы знаете, что можете вызвать super.readLine() и просто пропустить последнюю строку? –
Я думаю, что это будет так же, как использование BufferedReader напрямую и игнорирование последней строки, не так ли? Я действительно хочу последнюю строку большую часть времени, просто нет, если она не заканчивается символом EOL (извините за двойное отрицание, я надеюсь, что имеет смысл) – David