在UTF-8流中间打开InputStreamReader

时间:2015-06-23 16:11:20

标签: java encoding utf-8

我正在使用可搜索的InputStream,它在特定位置将流返回给我。流中的基础数据使用UTF-8编码。我想使用inputStreamReader打开此流并一次读取一个字符。

这是我的代码段

<div class="post-title-line"></div>

问题是如果position-1可能指向多字节UTF-8序列的中间。如何检测确保从新的UTF-8编码序列开始?提前谢谢。

1 个答案:

答案 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);