Я пытаюсь приблизиться к той же самой проблеме.Кажется, это не так тривиально, как может показаться на первый взгляд.Вы должны игнорировать понятие EOF / EOS, и вы должны отслеживать, где в файле журнала вы находитесь.
Я думаю, что лучший подход - создать отдельный поток для чтения файла журнала.Я сделал тест с BufferedReader
, что довольно многообещающе.Поток считывает все данные до конца файла (где readLine()
возвращает null
) и переходит в спящий режим на N секунд (5 в моем случае).Затем после пробуждения снова пытается прочитать строку.Если он возвращает String
, он продолжает обработку.Если он получает null
, он снова ложится спать.Он увеличивает счетчик строк при каждом успешном чтении и записывает / читает его при остановке / запуске, поэтому он может найти последнюю позицию в файле журнала и продолжить с этой точки.
Единственная проблема с этим подходом - это N-секундаПодождите.Было бы гораздо точнее, если бы у Java был способ указать «блокировать readLine()
независимо от EOF / EOS».С N секундным ожиданием вы можете спать, пока данные уже доступны.Однако сон кажется необходимым, если вы не захотите съесть всю мощность процессора.