Я настроил последовательный сканер, где RandomAccessFile указывая на мой файл может читать один символ, с помощью приведенной ниже способом:Чтение одного UTF-8 символов с RandomAccessFile
public char nextChar() {
try {
seekPointer++;
int i = source.read();
return i > -1 ? (char) i : '\0'; // INFO: EOF character is -1.
} catch (IOException e) {
e.printStackTrace();
}
return '\0';
}
seekPointer
является лишь ссылкой для моей программы, но метод хранит source.read()
в int
, а затем возвращает его в char
, если это не конец файла. Но эти символы, которые я получаю, находятся в формате ASCII, вызывают его так плохо, что я даже не могу использовать такой символ, как ç.
Есть ли способ получить символ , то есть в формате UTF-8 или по крайней мере что-то стандартизованное, что позволяет использовать не только набор символов ASCII?
Я знаю, что могу использовать readUTF()
, но это возвращает целую строку в виде строки, которая не является тем, чем я занимаюсь.
Кроме того, я не могу просто использовать другой считыватель потоков, потому что для моей программы требуется функция seek(int)
, позволяющая мне перемещаться вперед и назад в файле.
InputStreamReader? –
@TamasHegedus Обновлен вопрос. Мне нужна функция поиска. – finnrayment
Как @WillisBlackburn указывает в своем подробном ответе ниже, вы не можете выбрать случайное смещение байта в файле UTF-8 и гарантированно получить «символ». Возможно, вам придется выполнить резервное копирование, чтобы найти начало многобайтовой последовательности. Это то, что вы имели в виду? –