У меня есть процесс (фактически веб-сервер), который записывает в файл журнала, когда POST поступает от клиентов.BufferedReader readLine до завершения строки
Тогда у меня есть отдельный процесс, который считывает файл журнала как (хвост -f) в цикле:
BufferedReader reader = new BufferedReader(new FileReader(logFilePath));
String line = null;
while (true)
{
if ((line = reader.readLine()) != null)
{
if (firstLine == null) firstLine = line;
processLine(line);
continue;
}
try
{
Thread.sleep(sleepTime);
long ts = System.currentTimeMillis();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
break;
}
}
Это работает очень хорошо 99% времени, но время от времени, линия я прочитал в по BufferedReader.readLine не является полной строкой. Полагаю, это потому, что автор (веб-сервер) еще не закончил сбрасывать все байты строки в файл.
Любые предложения по исправлению или обо всем этом? Большое спасибо!
У вас есть шаблон для обнаружения, когда линия не завершена? – VirtualTroll
Просто быстрый указатель: вам не нужно использовать 'while (true) ... break', вы можете использовать переменную, чтобы проверить, следует ли продолжить. – Viruzzo
Я думаю, что это могло бы вам помочь: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html#sync() – nullpotent