私は、クライアントからのPOSTとしてログファイルに書き込むプロセス(実際にはWebサーバー)を持っています。行が完了する前に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は完全な行ではありません。私は、ライター(Webサーバー)がファイルの行のすべてのバイトをまだフラッシュし終えていないためだと思います。
この問題を修正または回避するには、どうもありがとう!
行が完了していないときに検出するパターンはありますか? – VirtualTroll
ちょっとしたポインタ: 'while(true)... break'を使う必要はありません。続けるべきかどうかを変数で調べることができます。 – Viruzzo
これはあなたを助けるかもしれないと思います: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html#sync() – nullpotent