我有两个 Java 进程,Processor
并且Simulator
. Simulator
每 5 秒写入规定的File X
数据记录(10 行文本)。持续读取此文件,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
连接到 an并且使用(适当配置)在数据到达时读取数据InputStream
没有问题。Scanner
在这里,我可以看到通过在记事本中刷新文件生成数据时正在正确写入数据。但是当使用文件而不是 InputStream 时,if ( parseDataBundle()) {
永远不会到达该行。
我究竟做错了什么?似乎拥有Processor
文件资源,因为我无法在它运行时删除它。我的直觉认为这可能与滥用并发有关。