В чем разница между методами добавления и записи в 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");
}
В этом смысле я думаю, что первоначальный вопрос поднимает правильный вопрос.