Joe*_*e K 9 java file large-files 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
}
Run Code Online (Sandbox Code Playgroud)
所以我的BufferedReader只是挂在文件的末尾,直到有更多东西要读.这很好用,但是有一个问题 - 如果在写入文件的过程正在写一行的过程中调用readLine.然后第一次调用readLine将返回该行的第一部分,下一次调用将返回第二部分.但我真的需要这两个部分,我需要完整的线条.
更具体地说,当发生以下事件交错时,我的问题就出现了:
结果是每个readLine()获取写入过程输出的整行的一部分.它在执行此操作时表现得如此,因为每次调用它时,它都会到达文件的末尾,因此返回它已读取的内容.
基本上我需要的功能是BufferedReader,它先前返回null一个readLine; 一个在它之后有一个换行符之前不会给你一条线的东西,而不仅仅是它之后的EOF.因此,如果它找到EOF,它不返回到该点的行,它返回null,并在文件被写入后返回该行,并且在它之后有一个新行.
我可能通过更直接地处理FileReader并实质上重写BufferedReader来实现这样做的粗略方法,但我不知道如何有效地执行此操作.我的实现可能不会像真正的BufferedReader快,我想避免拖慢程序的时候,还有就是要读取的数据.
您可以从 BufferedReader 的源代码开始,重写
String readLine(boolean ignoreLF)如果在行尾之前找到 EOF 会导致问题的方法。(不幸的是,由于包范围,它不能被继承)
| 归档时间: |
|
| 查看次数: |
4016 次 |
| 最近记录: |