PrintWriter.print(int)的字符编码

时间:2014-09-16 10:23:18

标签: java character-encoding

PrintWriter.print(int)方法的文档说:

  

打印整数。 String.valueOf(int)生成的字符串根据平台的默认字符编码转换为字节,这些字节的编写方式与write(int)方法完全相同。

它是否真的使用平台默认字符编码?文档错了吗?

如果PrintWriter委托给另一个Writer(由构造函数PrintWriter(Writer)创建),则记录的行为没有意义。对于使用命名字符编码(使用构造函数PrintWriter(File, String))构造的PrinterWriter的情况,声称的行为会令人惊讶。

2 个答案:

答案 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提出错误请求。