实例化缓冲写入器的差异

1 java io

我想实例化一个缓冲的编写器来写入socket输出流.

    String cs = "UTF-8";
    OutputStream out = socket.getOutputStream();

    Writer writer1 = new BufferedWriter(
            new OutputStreamWriter(out, cs));

    Writer writer2 = new OutputStreamWriter(
            new BufferedOutputStream(out), cs);

    Writer writer3 = new BufferedWriter(
            new OutputStreamWriter(
                    new BufferedOutputStream(out), cs));
Run Code Online (Sandbox Code Playgroud)

第一版和第二版之间有没有明显的区别?哪一个更适合写入套接字?第三个版本有点"矫枉过正"吗?

And*_*eas 5

第三个是矫枉过正.

第一个是首选,因为它在通过文本到字节编码器发送之前缓冲数据,这在块中完成时比一次一个字符更好.

javadoc OutputStreamWriter甚至如此说:

为了获得最高效率,请考虑在BufferedWriter中包装OutputStreamWriter,以避免频繁的转换器调用.例如:

Writer out
  = new BufferedWriter(new OutputStreamWriter(System.out));
Run Code Online (Sandbox Code Playgroud)