我的任务是(通过一个非常大的,不断增长的文件逐行读取)。这里基本上是我现在在做什么:使用BufferedReader从大的,不断增长的文件中读取
BufferedReader rd = //initialize BufferedReader
String line;
while(true){
while((line=rd.readLine())==null){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
//handle exception
}
}
//process line
}
所以我的BufferedReader只是在文件的结尾挂起,直到有要读更多的东西。这很好,但有一个问题 - 如果readLine被调用,而写入该文件的进程正处于写入行的中间。然后,第一次调用readLine将返回该行的第一部分,下一次调用将返回第二部分。但我真的需要这两部分,我需要完整的线条。
更具体地说,我的问题发生在下列事件交错发生:
- 写作过程中写入最行
- 的readLine()被调用
- 写作过程中完成该行,并添加换行符
- 的readLine()被调用
结果是每个的readLine( )提取写入过程输出的整个行的一部分。它的行为与预期的一样,因为每次调用它时,都会到达文件末尾,因此会返回读取的内容。
所以基本上我需要的功能是一个BufferedReader,它早些时候返回null一个readLine;一个在它之后没有给你一条线,而不是在它之后的EOF。因此,如果它找到EOF,它不会返回到该点的行,它将返回null,并在文件写入后返回该行,并且后面有一个新行。
我大概可以通过更直接地处理FileReader并基本上重写BufferedReader来实现一个粗略的方法,但我不知道如何有效地执行此操作。我的实现可能不会像真正的BufferedReader那样快,我想避免在是数据被读取的时候减慢程序的速度。
我还惊奇地发现了这一点,但它如果有更多的被添加到该文件,则返回null后返回非空。 也许我应该更清楚地说明局部线条 - 我用更多描述编辑了原始问题。问题是BufferedReader表现得如预期的那样,只是它所做的并不是我想要的。 – 2010-07-08 17:54:30