我正在使用可搜索的InputStream,它在特定位置将流返回给我。流中的基础数据使用UTF-8编码。我想使用inputStreamReader打开此流并一次读取一个字符。
这是我的代码段
<div class="post-title-line"></div>
问题是如果position-1可能指向多字节UTF-8序列的中间。如何检测确保从新的UTF-8编码序列开始?提前谢谢。
答案 0 :(得分:2)
假设您可以随时重新定位流,您可以简单地读取字节,而前两位是“10”。如下所示:
// InputStream doesn't actually have a seek method, but I'll assume you're using
// a subclass which does...
inputStream.seek(position);
while (true) {
int nextByte = inputStream.read();
if (nextByte == -1 || (nextByte & 0xc0) != 0xc0) {
break;
}
position++;
}
// Undo the last read, effectively
inputStream.seek(position);
InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);