私は 2 つの Java プロセスを持っていProcessor
ますSimulator
。は、5 秒ごとに所定のデータ レコード (10 行のテキスト) にSimulator
書き込みます。File X
はProcessor
このファイルを継続的に読み取り、トークンが有効なレコードを示すのを待ちます。コードは次のとおりです (ファイル名をいくつか置き換えています)。
ではSimulator
、5 秒ごと:
FileWriter fileWriter = new FileWriter(DATA_FILE, true);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(DATA);
bufferedWriter.close();
ではProcessor
、常に:
mScanner = new Scanner(new BufferedReader(
new FileReader(DATA_FILE)));
mScanner.useLocale(Locale.UK);
while (true) {
while (mScanner.hasNextLine()) {
// Parse the data bundle.
if (parseDataBundle()) {
...
}
}
}
以前は、Processor
が にフックされていて、 (適切に構成された) を使用して到着したデータを読み取ることにInputStream
問題はありませんでした。Scanner
ここでは、メモ帳でファイルを更新して生成されたときに、データが正しく書き込まれていることがわかります。しかし、InputStream ではなくファイルを使用すると、if ( parseDataBundle()) {
行に到達することはありません。
私は何を間違っていますか?Processor
実行中は削除できないため、ファイルリソースを保持しているようです。私の腸は、おそらく並行性の誤用と関係があると考えています。