0

有没有办法对以 UTF 格式存储的文件按排序顺序执行二进制搜索。我可以使用 RandomAccessFile 对文本文件执行二进制搜索。首先我找出文件的长度,然后使用 fseek 跳转到文件的中间位置,跳转到中间位置后我读取字节。但是,我发现以 UTF 格式存储的文件不可行,因为第一个字符在 UTF 格式中是随机的。而且使用 DataInputStream 我无法跳转到文件中的特定位置。是否可以对这样的文件进行二进制搜索。如果是,那么使用哪些类。

4

1 回答 1

1

是的,有可能。如果您跳到文件的中间,您首先需要转到最近的记录分隔符,然后使用记录分隔符后开始的文本。

根据您拥有的确切文件格式,可以使用换行符、TAB 字符或类似的东西作为记录分隔符。

如果记录分隔符是 Unicode 编号低于 32 的字符(NL、CR、TAB 满足),则很容易找到记录分隔符。然后你不需要关心多字节 UTF-8 编码(用于定位分隔符)。如果它是一种宽字符 Unicode 格式,那么它也不会更难。

DataInputStream是随机访问的错误类。(流式传输有点与随机访问相反。)请查看RandomAccessFile

于 2012-04-16T16:54:11.530 回答