Да, вы скорее ошибаетесь. Но легко ошибиться ... если вы не понимаете способ моделирования текстовых данных Java.
Вы объединяете функции Reader / Writer с функциями InputStream / OutputStream.
- Первые позволяют вам потреблять (читать) и создавать (писать) символы; т.е. текстовые данные, представленные с использованием кодовых точек Unicode.
- Последние позволяют вам потреблять (читать) и производить (писать) байты; т.е. двоичные или двоичные данные.
Теперь классы многие Reader
и Writer
фактически выполняют две функции одновременно; то есть получение или прием данных И преобразование данных в / из символов. В некоторых случаях вы можете указать классу, как выполнить этап преобразования, указав кодировку.
Напротив, InputStream
или OutputStream
является источником или приемником байтов, и обычно 1 не переводит символы.
В случае Files.readAllBytes
метод считывает все байты из файла и помещает их в массив байтов. Он не принимает параметр Charset
, потому что он не предназначен для какого-либо декодирования.
С другой стороны, Files.readAllLines
принимает Charset
. Это потому, что он доставляет содержимое файла в виде массива String
объектов, представляющих строк файла. Чтобы при преобразовании байтов в Java String
вам нужно сказать, как кодируются текст / символы, представленные байтами.
1 - Гипотетически это могло бы ... но вы увидит, что Java не предоставляет такие классы, как ReaderInputStream
или WriterOutputStream
. В них нет необходимости.