我需要阅读一个非常大的日志文件(大约400MB)并在textarea中显示其内容。
显然我不能首先阅读整个文件,因为它的维度,所以我正在寻找一种方法,可以读取前n行(或部分字节)然后,当被问到时,开始阅读下一个n线等等。该方法需要在两个方向上工作:即如果显示从1000到1500的行并且用户想要回读,我必须显示从500到1000的行。
我正在尝试使用RandomAccessFile
,LineIterator
和经典BufferedReader
方法,但这些似乎不是很好的解决方案。
提前致谢。
答案 0 :(得分:3)
如果您的文件没有严格的结构(即Martijn注意到的每行或每个逻辑块的固定字符数),那么您就无法使用RandomAccessFile优势。
在这种情况下,您可以尝试将大文件拆分为较小的文件,每个文件中的行数固定(例如1000)。在这种情况下,当用户想要查看从1800到2100的行时,您只需要读取2个文件(如果您说总大小约为400 Mb,则可能只有几千个文件)。
如果你不能这样做,你唯一能做的就是使用NIO来提高性能至少一点。
答案 1 :(得分:1)
在类似的情况下,其他人建议将文件存储在数据库中。例如,每行作为单独的记录。然后,在任何方向和大小块中读取数据都会容易得多。