gpt4 book ai didi

Java 随机文件访问 : Get byte offset of line start

转载 作者:行者123 更新时间:2023-11-30 06:22:48 30 4
gpt4 key购买 nike

我需要随机访问文本 (ASCII) 文件中的特定记录,然后从那里读取直到找到特定的“停止序列”(记录分隔符)。该文件包含多行记录,每条记录由分隔符分隔。每条记录也需要不同数量的行!这是特定专业领域中众所周知的文件格式,无法更改。

我想为文件编制索引,以便快速跳转到请求的记录。

在类似的问题中

How to Access string in file by position in Java

和其中的链接,答案总是引用各种类的seek() 方法,例如RandomAccessFile。我知道!

我遇到的问题是如何获得搜索所需的偏移量! (索引文件)

BufferedReader 没有 getFilePointer() 方法或任何其他方法来获取文件开头的当前字节偏移量。 RandomAccessFile 有一个 readLine() 方法,但它的性能非常糟糕。它对我的情况根本不可用。

我需要逐行读取文件,每次找到记录分隔符时我都需要获取字节偏移量。我怎样才能做到这一点?

最佳答案

您可以尝试子类化 BufferedReader 类来记住读取位置。但是您将没有搜索功能。

正如您提到的,一条记录可以是多行的,但所有记录都由一个停止序列分隔。鉴于此,您可以像这样使用 RandomAccessFile:

  1. 有一个字节缓冲区 byte b[] 假设大小为 8k(这是出于性能原因)

  2. 从此缓冲区中的文件中读取 8k 并尝试找到分隔符,如果找不到,则读取另一个 8k block ,但之前将数据附加到某个 StringBuilder 或其他结构。

  3. 当您找到分隔符时,分隔符的位置由自上次找到分隔符以来处理的字节数给出(您需要做一些简单的数学运算)。

棘手的部分是记录分隔符是否超过 1 个字符,但这应该是个大问题。

关于Java 随机文件访问 : Get byte offset of line start,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910468/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com