Мне нужно проанализировать входной потоковый символ UTF-8 за символом (кодовая точка UTF-8, а не символ Java).Каков наилучший подход?
Обновление вопроса, чтобы сделать его более понятным (спасибо @skomisa): Итак, следующее не потоковое:
private static String replaceNonBPMWithUnknownCharacter(final String input) {
StringBuilder result = new StringBuilder(input.length());
input.codePoints().forEach((codePoint) -> {
if (isBmpCodePoint(codePoint)) {
result.append('\ufffd');
} else {
result.append(isBmpCodePoint(codePoint) ? toChars(codePoint) : REPLACEMENT_CHAR);
}
});
return result.toString();
}
String result = replaceNonBPMWithUnknownCharacter("\uD83D\uDE0E? X")
Я хотел бы иметь потоковую версию,Например:
InputStream stream = replaceNonBPMWithUnknownCharacter(new ByteArrayInputStream("\uD83D\uDE0E? Y".getBytes(UTF_8)))
, который использует как можно меньше процессора и памяти.Следующий вопрос похож на similair, но не является потоковым: Чтение следующего символа (полная кодовая точка Unicode) из входного потока Java .
Самое важное: Как прочитать кодовую точку из потока?(так как я могу преобразовать поток байтов, из которого я знаю, что они кодированы в UTF-8, в поток кодовых точек).