Почему java nio может записывать только байты?

Верно ли, что java nio может писать только байты? Например:

    Path path=FileSystems.getDefault().getPath("\(a path)")
    Files.write(path, "test string".getBytes())

Я не могу передать только строку второму параметру Files.write. Если это так, то почему можно записывать только байты?

все может писать только байты

Scary Wombat 12.11.2018 02:56

Байты - это то, что содержат файлы. Все, что выглядит так, будто записывает строки, на самом деле преобразует их в байты и записывает их. nio в основном задумывался как быстрый и эффективный интерфейс, поэтому логично, что у него не было бы этих помощников.

yshavit 12.11.2018 03:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
98
1

Ответы 1

Другой метод, Files.write(Path,Iterable,Charset,OpenOption...), может использоваться для прямой записи CharSequence (String - это CharSequence).

Write lines of text to a file. Each line is a char sequence and is written to the file in sequence with each line terminated by the platform's line separator, as defined by the system property line.separator. Characters are encoded into bytes using the specified charset.

The options parameter specifies how the file is created or opened. If no options are present then this method works as if the CREATE, TRUNCATE_EXISTING, and WRITE options are present. In other words, it opens the file for writing, creating the file if it doesn't exist, or initially truncating an existing regular-file to a size of 0. The method ensures that the file is closed when all lines have been written (or an I/O error or other runtime exception is thrown). If an I/O error occurs then it may do so after the file has been created or truncated, or after some bytes have been written to the file.

В Java 8 добавлена ​​перегрузка, которая не требует Charset и использует UTF-8 по умолчанию.

В Java 11 добавлен еще один метод: Files.writeString(Path,CharSequence,Charset,OpenOption...).

Write a CharSequence to a file. Characters are encoded into bytes using the specified charset.

All characters are written as they are, including the line separators in the char sequence. No extra characters are added.

The options parameter specifies how the file is created or opened. If no options are present then this method works as if the CREATE, TRUNCATE_EXISTING, and WRITE options are present. In other words, it opens the file for writing, creating the file if it doesn't exist, or initially truncating an existing regular-file to a size of 0.

Этот метод также имеет перегрузку, которая не требует Charset, снова используя UTF-8 по умолчанию.

Однако под капотом CharSequence преобразуются в байты точно так же, как Scary Wombat и yshavit упоминают в комментариях к вопросу. Документация по этим методам даже делает это явным:

Characters are encoded into bytes using the specified charset.

Другие вопросы по теме