InputStreamReader を使用してファイルから文字を読み取り、それらを StringBuilder に追加するのは Java の一般的なパターンです。それを行う明白な方法は次のようなものです:
int c = reader.read();
sb.append((char)c);
ただし、ファイルに (違いがある場合は UTF-8 エンコーディングを指定したと仮定して) 16 ビットに収まらない文字 (厳密にはコード ポイント) が含まれているとします。リーダーは、これを 16 ビット文字のペアではなく、単一の 32 ビット コード ポイントとして返しますか?
もしそうなら、上記の最後の行は実際には次のように読むべきです:
sb.appendCodePoint(c);
2 つのオプションを区別する既知のテスト ケース (一連の UTF-8 バイト) はありますか?