Есть задача:
Дано: файл, в котором есть символы в кодировке UTF-8. Символы произвольные.
Нужно: получить строку заданной длины из заданного места в файле и отобразить в консоль.
Проблема возникла в том, что используя класс RandomAccessFile я получаю набор байт, а после конвертации в строку я получаю 1 лишний символ (зависит о того, захватил ли я пробел или нет).
Подскажите, пожалуйста, как произвести нормальное декодирование из массива байт в строку в UTF-8?
Пример строки в файле: Спасибо, что ты есть
Код:
public class Main {
public static final int CHARS_PER_PAGE = 19;
public static void main(String[] args) {
System.out.println(getPage("test.txt", 0));
}
public static String getPage(String filePath, int pageNum) throws IOException {
int startPos = CHARS_PER_PAGE * pageNum;
byte[] pageBytes = new byte[CHARS_PER_PAGE];
RandomAccessFile raf = new RandomAccessFile(filePath, "r");
raf.seek(startPos);
raf.read(pageBytes, 0, CHARS_PER_PAGE);
System.out.println("Bytes Array: " + Arrays.toString(pageBytes));
System.out.println("Result String: " + new String(pageBytes, StandardCharsets.UTF_8));
raf.close();
return new String(pageBytes, StandardCharsets.UTF_8);
}
}