私は 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実行中は削除できないため、ファイルリソースを保持しているようです。私の腸は、おそらく並行性の誤用と関係があると考えています。