Хочу делать 2 вещи:
1) Читать до определённых символов (пусть, например, "а" и "б")
2) знать о какой символ я остановился ("а" или "б")
Пытаюсь ковыряться с BufferedReader, но ничего путного не выходит.
Суть того что я делаю: читаю в буфер, декодирую, потом хочу работать. Всё ломается на "декодирую", потому что UTF-8 может иметь символы разной длины. И я попадаю в ситуацию, когда считалась в буфер только часть символа (например, 1 байт из 3-х).
Как сделать? Мб подход неверный? Надеюсь на стандартное решение, которое я почему-то не вижу.
Не надо ничего декодировать, просто укажите кодировку файла при открытии
try (BufferedReader in = new BufferedReader(
new InputStreamReader(
new FileInputStream(file), "UTF8"))) {
// Делайте с входным потоком всё, что вам нужно
}
К примеру, воспринимать буфер как поток байт, как только чтение доходит до конца, то подгружать следующую порцию и сбрасывать указатель на начало. При декодировании не полагаться на жёстко закодированные смещения типа a[i+1], a[i+2], a[i+3] и т.п., а получать следующий байт как-нибудь типа того: mybuffer.getNextByte() (в свою очередь, метод getNextByte должен обрабатывать ситуацию, когда буфер исчерпан, и в таком случае подгружать следующую порцию байт)