В чем разница между методами добавления и записи в java.io.writer?

Интерфейс java.io.Writer имеет два метода, называемых append и write. Каковы различия между этими двумя? Это даже говорит о том, что

Вызов этого метода формы out.append(c) ведет себя точно так же, как вызов out.write(c)

так в чем причина наличия двух вариантов имени метода?

7 ответов

Решение

Есть небольшие различия между append() и write(). Все, что вы можете потренироваться, читая Javadocs. Подсказка.;)

  • write будет принимать только строку, которая не должна быть нулевой, и возвращает void
  • append примет любую последовательность CharSequence, которая может иметь значение null, и вернет Writer, чтобы он мог быть прикован цепью.

write - это более старый формат стиля, созданный до того, как CharSequence был доступен.

Эти методы перегружены, так что есть

  • write(int) где int брошен на полукокса append(char) должен быть типом символа
  • write(char[] chars) принимает массив char, эквивалентного append() нет.

Возможно, для соответствия добавляемому интерфейсу: http://download.oracle.com/javase/6/docs/api/java/lang/Appendable.html

Append() может взять CharSequence, в то время как write() занимает String,

поскольку String это реализация CharSequenceВы также можете пройти String в append(), Но вы также можете передать StringBuilder или же StringBuffer в appendчто вы не можете сделать с write(),

Как вы можете видеть из документации, append также возвращает Writer, к которому вы только что написали, чтобы вы могли выполнить несколько операций добавления, таких как:

out.append(a).append(b).append(c)

Writer.append(c) возвращает экземпляр Writer. Таким образом, вы можете добавить несколько вызовов в цепочку, например: out.append("Hello").append("World");

Похоже, это побочный продукт Appendable интерфейс, который java.io.Writer реализует в целях обеспечения совместимости с java.util.Formatter, Как вы заметили, в документации указано, что для java.io.Writer между этими двумя методами нет практической разницы.

То, что было отмечено выше, верно. Различные вкусыBufferWiterметод возвращаетWriter, который реализуетAppendable, среди прочего, тем самым предоставляя вам возможность совершать звонки по цепочке. Кроме того, позволяет пройтиCharSequenceтакже как иchar, в отличие отint,Stringилиchar[], как и методы. Все верно.

Однако, как говорится в вопросе, важно отметить, что основное поведениеappend()все еще почти такой же, как уwrite(). Несмотря на несколько вводящую в заблуждение номенклатуру, содержимое существующего файла будет перезаписано, а не добавлено , если только вы неFileWriterсоздается в противном случае:

      try (var writer = new BufferedWriter(new FileWriter("myFile.txt", true));) {
    writer.append("XXX").append("ZZZ");
}

В этом смысле я думаю, что первоначальный вопрос поднимает правильный вопрос.

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