PrintWriter.print(int)
方法的文档说:
打印整数。
String.valueOf(int)
生成的字符串根据平台的默认字符编码转换为字节,这些字节的编写方式与write(int)
方法完全相同。
它是否真的使用平台默认字符编码?文档错了吗?
如果PrintWriter
委托给另一个Writer
(由构造函数PrintWriter(Writer)
创建),则记录的行为没有意义。对于使用命名字符编码(使用构造函数PrintWriter(File, String)
)构造的PrinterWriter
的情况,声称的行为会令人惊讶。
答案 0 :(得分:1)
文档是错误的,至少对于PrintWriter的Oracle实现来说,它执行以下操作:
public void print(int i) {
write(String.valueOf(i));
}
因此,不会转换为字节,并且不会调用write(int)
。 BTW,write(int)
写一个字符,而不是一个字节。
答案 1 :(得分:0)
你是对的。
遵循PrintWriter.write(int)的源代码,它最终映射到以下抽象方法:
abstract public void write(char cbuf[], int off, int len) throws IOException;
检查一个实现此方法的情况OutputStreamWriter,可以传入一个特定的charset来使用,在这种情况下,该抽象方法的实现将使用该char集而不是平台。
因此,文档必须一直在考虑当天的预期默认行为,但它不包括今天不同子类的实际行为。因此,doc可以使用现在更新。用Oracle提出错误请求。