Java 的 java.io.Writer 接口有两个方法分别叫做 append 和 write。这两者之间有什么区别?它甚至说:
形如
out.append(c)
的调用与out.write(c)
的调用完全相同
那么为什么要有两种方法名变体呢?
形如
out.append(c)
的调用与out.write(c)
的调用完全相同
那么为什么要有两种方法名变体呢?
append()和write()之间有一些细微的差别。您可以通过阅读Javadocs来解决所有这些问题。提示。;)
void
write是在CharSequence可用之前创建的旧格式。
这些方法被重载,因此有一个
write(int)
其中int
被转换为char。append(char)
必须是char类型。write(char[] chars)
接受字符数组,没有相应的append()。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
,这两种方法之间没有实际区别。
BufferWriter
的append()
方法返回一个Writer
,它实现了Appendable
等接口,从而使您能够链接调用。此外,append()
允许您传递CharSequence
以及char
,而不是像write()
方法那样传递int
、String
或char[]
。一切正确。append()
的基本行为仍然与write()
的基本行为相似。尽管命名有些误导,但现有文件内容将被覆盖,而不是追加,除非您的FileWriter
以其他方式实例化:try (var writer = new BufferedWriter(new FileWriter("myFile.txt", true));) {
writer.append("XXX").append("ZZZ");
}
从这个意义上讲,我认为原问题提出了一个有效的观点。
write(int)
替换为write(char)
(需要更改一些代码),但您肯定需要重新编译它。如果您没有偏好,我建议您使用append
。它有这个名称的原因是为了与始终使用append
的StringBuffer保持一致。StringBuilder/StringBuffer/Writer现在都共享Appendable接口。 - Peter Lawrey