读取字符行并获取文件位置
我正在从文本文件中读取连续的字符行。文件中字符的编码可能不是单字节。
在某些时候,我想获取下一行开始的文件位置,以便我以后可以重新打开文件并快速返回到该位置。
问题
有没有一种简单的方法可以做到这两点,最好使用标准的Java库?
如果没有,什么是合理的解决方法?
理想解决方案的属性
理想的解决方案是处理多字符编码。这包括 UTF-8,其中不同的字符可能由不同数量的字节表示。理想的解决方案将主要依赖于受信任的、得到良好支持的库。最理想的是标准的Java库。第二好的是Apache或Google库。解决方案必须是可扩展的。将整个文件读入内存不是解决方案。返回到位置不应要求在线性时间中读取所有先前的字符。
详
对于第一个要求,是有吸引力的。但是,缓冲显然会干扰获取有意义的文件位置。BufferedReader.readLine()
不太明显,也可以提前阅读,干扰获取文件位置。从 InputStreamReader 文档中:InputStreamReader
为了实现字节到字符的高效转换,从基础流中提前读取的字节数可能多于满足当前读取操作所需的字节数。
该方法读取每个字符的单个字节。RandomAccessFile.readLine()
每个字节都转换为一个字符,方法是将字符的下八位的字节值设置为零。因此,此方法不支持完整的 Unicode 字符集。