Java默认情况下对BufferedReader使用什么编码/字符集?

时间:2018-09-01 08:05:38

标签: java encoding bufferedreader

当我们创建新的BufferedReader对象而不显式提供编码时,Java默认会使用哪种编码/字符集?

例如:

try (final BufferedReader reader = new BufferedReader(new FileReader("my_file.txt"))) {
  reader.readLine(); // What encoding is used to read the file?
}

2 个答案:

答案 0 :(得分:2)

BufferedReader不执行任何解码。它是另一个Reader的包装,它可能会也可能不会解码。

FileReader使用由Charset.defaultCharset()返回的JVM默认字符编码进行解码

javadoc指出:

  

用于读取字符文件的便捷类。 此类的构造函数假定默认字符编码和默认字节缓冲区大小合适。要自己指定这些值,请在InputStreamReader上构造一个FileInputStream

答案 1 :(得分:1)

FileReaderInputStreamReader,它使用FileInputStream作为输入,而InputStreamReader在没有指定字符集的情况下使用默认字符集。

在源代码jdk10中,它使用Charset.defaultCharset()

public static StreamDecoder forInputStreamReader(InputStream in,
                                                 Object lock,
                                                 String charsetName)
    throws UnsupportedEncodingException
{
    String csn = charsetName;
    if (csn == null)
        csn = Charset.defaultCharset().name(); // get default charset
    try {
        if (Charset.isSupported(csn))
            return new StreamDecoder(in, lock, Charset.forName(csn));
    } catch (IllegalCharsetNameException x) { }
    throw new UnsupportedEncodingException (csn);
}

其中

  

返回此Java虚拟机的默认字符集。

     

默认字符集是在虚拟机启动期间确定的,并且   通常取决于基础语言环境和字符集   操作系统。

您可以打印它:

public static void main(String[] args) {
    System.out.println(Charset.defaultCharset());
}