基于时间戳读取文件内容的有效方法

时间:2018-02-26 19:02:53

标签: java performance bufferedreader filereader fileinputstream

我有一个文件说abc.log,其中附加了带时间戳的数据。

例如:

2018-02-18 22:42:05 DATA_ONE

2018-02-18 22:42:20 DATA_TWO

2018-02-18 22:44:05 DATA_THREE

2018-02-19 00:42:05 DATA_FOUR

2018-02-19 01:42:05 DATA_FIVE

2018-02-19 01:44:05 DATA_SIX

2018-02-19 03:42:05 DATA_SEVEN

2018-02-19 04:42:05 DATA_EIGHT

2018-02-19 06:42:05 DATA_NINE

在Java中过去两小时内只读取/获取带时间戳的那些行的最快或最有效的方法是什么?

我知道的一种方法是逐行读取和解析整个文件,并且只获得最近两小时内有时间戳的那些行,但有没有更好或更有效的方法呢?

注意:由于数据被附加到文件,因此文件大小会呈指数级增长。读取整个文件并每次解析都会导致性能问题。

2 个答案:

答案 0 :(得分:0)

Yoy可以使用Dichotomic search or binary search algoritm

第一次搜索位于文件的中间。 根据读取记录之前或之后的时间,下一次搜索将在文件的第一季度或第三季度完成。等等。每次阅读都会缩小he堆栈。找到第一条记录后,按顺序阅读下一条记录。

要读取文件的中间部分,您需要使用文件的随机访问。

如何确定每条记录取决于文件的结构。

答案 1 :(得分:0)

如果你想保持文件的方式,你可以每小时生成一个文件 在这种情况下,收集最后两个小时的日志将足够简单:它将在3个文件上执行,您将忽略不在该区间内的日志。
滚动文件日志框架的附加程序可以实现此目标。不要重新发明轮子。

其他替代方法:将这些信息存储在数据库中并执行查询 如果您的日志增长会更有效,此外,如果您的需求发生变化,它也会更灵活。