【发布时间】:2017-02-17 23:24:01
【问题描述】:
我已经设置了一个顺序扫描器,其中指向我的文件的 RandomAccessFile 能够通过以下方法读取单个字符:
public char nextChar() {
try {
seekPointer++;
int i = source.read();
return i > -1 ? (char) i : '\0'; // INFO: EOF character is -1.
} catch (IOException e) {
e.printStackTrace();
}
return '\0';
}
seekPointer 只是我的程序的参考,但该方法将source.read() 存储在int 中,然后如果它不是文件末尾,则将其返回为char。但是我收到的这些字符是 ASCII 格式的,实际上它太糟糕了,我什至不能使用诸如 ç 之类的符号。
有没有一种方法可以让我接收 单个 字符,即 UTF-8 格式或至少一些标准化的字符,而不仅仅是 ASCII 字符集?
我知道我可以使用readUTF(),但这会将整行作为字符串返回,这不是我想要的。
另外,我不能简单地使用另一个流阅读器,因为我的程序需要一个seek(int) 函数,允许我在文件中来回移动。
【问题讨论】:
-
输入流阅读器?
-
@TamasHegedus 更新了问题。我需要一个搜索功能。
-
正如@WillisBlackburn 在下面的详细回答中指出的那样,您不能在 UTF-8 文件中选择随机字节偏移量并保证获得“字符”。您可能需要备份才能找到多字节序列的开始。这是你的想法吗?
-
@JimGarrison 好吧,我正在尝试根据他的答案制作一个算法,但效果不是很好。所以不,不是我的想法,更多的是亚当的回答。我只是在看看目前有效的方法。
-
那是因为你需要使用
String(byte[] bytes, Charset c)构造函数并指定UTF-8。否则它将假定您的平台默认字符集。
标签: java utf-8 randomaccessfile