`
langyu
  • 浏览: 888217 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

文件中行级偏移量的一种获取方式

    博客分类:
  • java
阅读更多
  下面所描述的内容是根据实际需要对BufferedReader的小改进,并提供一张简图来说明所做的修改。如有更方便的方式请回帖或联系dennyy99@gmail.com给予明示,谢谢


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



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



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


PositionAwareReader reader = new PositionAwareReader(new InputStreamReader(inputStream));

String line = null;
while ((line = reader.readLine()) != null) {
	long offset = reader.getNextPos() - line.length() - 1;
	System.out.println("Line:" + line + ", offset:" + offset);
}



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

点此下载


  • 大小: 45.3 KB
  • 大小: 21.3 KB
分享到:
评论
1 楼 ostar005 2015-02-25  
XG君,真NB!

相关推荐

    行级触发器不能读.txt

    根据提供的文件信息,我们可以推断出此文档主要讨论的是数据库中的行级触发器问题,特别是触发器在操作数据时的一些限制。接下来,我们将详细解析这些信息,并深入探讨相关的知识点。 ### 行级触发器概念 行级...

    Sybase IQ 16.0中文版本 管理:内存行级版本控制

    内存行级版本控制(Row Level Versioning, RLV)是SAP Sybase IQ 16.0版本中引入的一项重要功能。它允许多个用户同时对同一张表进行修改操作,而无需等待事务锁释放即可继续工作,极大地提高了多用户环境下的并发...

    行级锁的实例

    行级锁的实例

    poi读取大数据量excel文件,避免内存溢出,行级操作

    poi读取大数据量excel文件,避免内存溢出,行级操作 根据本网站的资源修改的。 将一些类路径错误全部进行了修正。 另外,需要自己在类路径里,放spring-context.jar和spring-beans.jar包。

    jQuery行级解析读取XML文件

    这是我在做项目时的测试源码,利用jQuery的Ajax功能读取XML文件中指定行的数据。在IE6+和FireFox 3.0+浏览器上测试都完美通过。下载源码包后直接解压到你的网站根目录即可进行测试。详细代码说明请浏览关于此源码包...

    关于采用Oralce行级安全策略解决应用系统数据权限的论述

    **Oracle行级安全策略**(Row Level Security)是一种高级的数据访问控制机制,它允许数据库管理员针对特定的用户或角色设置细粒度的数据访问规则。与传统的表级权限相比,行级安全策略能够更精细地控制哪些用户可以...

    施耐德INrow行级制冷系统 适用小到大型数据中心应用.pdf

    施耐德的InRow行级制冷系统是一种针对数据中心的制冷解决方案,该系统通过直接在热源旁边进行制冷,有效避免了热风的循环,提高了制冷的预测性。这种系统特别适合于从小型到大型数据中心的应用。 InRow行级制冷系统...

    MySQL中的行级锁,表级锁,页级锁1

    MySQL中的锁机制主要分为行级锁、表级锁和页级锁,这三种锁的粒度不同,分别适用于不同的并发场景。 行级锁是MySQL中最细粒度的锁,只针对当前操作的行进行锁定。行级锁分为共享锁(读锁)和排他锁(写锁),它能...

    文件比较器(不同文件或相似文件)

    文件比较器,也被称为文件差异检测工具,是IT行业中一种重要的辅助软件,它主要用于分析两个或多个文件之间的差异,帮助用户快速找出它们之间的异同。这个工具在版本控制、代码审查、文档校对等多个场景中都有广泛的...

    MySQL中的行级锁、表级锁、页级锁

    页级锁是一种介于行级锁和表级锁之间的锁机制,一次锁定相邻的一组记录。它的优点在于平衡了加锁速度和冲突概率,但仍然存在死锁的风险。MySQL的BDB存储引擎支持页级锁。 4. InnoDB的行锁与表锁 InnoDB存储引擎既...

    MySQL中的行级锁定示例详解

    MySQL中的行级锁定是数据库管理并发事务的一种策略,它允许多个事务同时访问同一表的不同行,从而提高了系统并发性能。行级锁定主要分为两种类型:共享锁(Shared Locks)和排他锁(Exclusive Locks)。 共享锁,...

    fcntl.py文件

    `fcntl.py` 文件是Python标准库中的一个模块,主要用于提供与Unix系统(如Linux)上的文件控制相关的功能。在Windows系统中,这个模块是不可用的,因为它的功能主要是基于Unix风格的`fcntl`系统调用。这个模块的命名...

    数据中心行级制冷的工作原理白皮书.pdf

    数据中心行级制冷是当今数据中心制冷技术中的一种流行方式,它涉及在IT设备产生的热空气与机房内环境空气混合之前对其进行冷却。行级制冷通过机柜行为基础的冷却架构,将冷却单元放置在IT机柜的热通道中,从而实现对...

    文件备份C#源程序

    在Windows环境下,C#作为一种强大的编程语言,经常被用来开发文件备份的解决方案。本项目名为“文件备份C#源程序”,其核心功能是通过比较文件差别来实现选择性同步,将一个文件夹的内容同步到另一个文件夹。这种...

    C语言的文件操作 C语言文件操作

    在C语言中,文件操作是处理外部数据存储和读取的重要方式。通过一系列预定义函数,如`fopen`, `fclose`, `fgetc`, `fputc`, `fgets`, 和 `fputs`等,C语言能够实现对文件的打开、关闭、读取、写入等功能。 ### 文件...

    java读取文件方法大全

    根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...

Global site tag (gtag.js) - Google Analytics