微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有基于字符偏移量的动态重新定位的字符读取器如FileReader

如何解决具有基于字符偏移量的动态重新定位的字符读取器如FileReader

我正在寻找类似于RandomAccessFile的东西,它允许基于字符(而不是字节)偏移量在大文件内定位,并允许从那里读取。我所遇到的FileReader或大多数实现都没有像RandomAccessFile中提供的那样的类似搜索方法

是否存在这样的阅读器?

解决方法

tl; dr 不存在这样的Reader,因为不能轻易使其适用于每种编码。

如果您使用的编码是固定宽度的编码(例如ISO-8859-*,Windows代码页,ASCII,UCS-2等),则此方法可行,因为您只需将乘法相乘即可。字符偏移一些常数(取决于编码,通常为1)以获得字节偏移。

实际上,您可以通过在基础InputStream上进行查找来轻松地自己进行模拟(请确保 not 使用BufferedReader,因为缓冲可能会被寻找)。

但是有两种非常流行的编码(以及一些不太流行的编码)是可变宽度的,这意味着每个字符可以用不同数量的字节表示。 UTF-8和UTF-16是众所周知的示例,但Shift-JIS等其他也具有此属性。

对于可变宽度编码,无法创建没有任何索引或先验知识的流。一个可以通过仅读取所需的字节数来实现seek(),但这实际上并没有真正的seek的好处,因为您实际上必须从磁盘读取“已跳过”字节以了解要走多远。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。