读书人

资料中行级偏移量的一种获取方式

发布时间: 2012-08-25 10:06:20 作者: rapoo

文件中行级偏移量的一种获取方式
下面所描述的内容是根据实际需要对BufferedReader的小改进,并提供一张简图来说明所做的修改。如有更方便的方式请回帖或联系dennyy99@gmail.com给予明示,谢谢


如果需要对文件内容建索引,就可能需要每行数据的起始偏移量。下图是文件内容索引的简明结构,目标是为了引出我们对行级偏移量的需求



我们平时都是用BufferedReader来读取行内容,如果在它的基础上能提供行级偏移量岂不更好嘛,因此动手对BufferedReader的源码做了简单修改。因为BufferedReader是不断有buffer去原始的input stream获取内容,然后逐一遍历buffer来组织成行。如果想获得行的起始处,就得追踪BufferedReader对行的构造过程。我尝试过这样做,但出现过一些计算错误的问题。所以反向行之,先获取Reader读完一行后,它的行尾位置(line end position)。用行尾位置减去行的长度不就是行的起始偏移量吗?事实证明这样是一种简便有效的方式。详情见下图



附件是修改后的代码,命名为PositionAwareReader,它的使用方式示例如下




获取行起始偏移量之后就可以做一些好玩的事情了。上面提到的索引是一方面,也可以实现如linux命令"grep 'keyword' file -B 10 -A 10" 这样的行为,其它的使用方式正在探索中。

点此下载


读书人网 >编程

热点推荐