java - 实例化缓冲编写器的差异

标签 java io

我想实例化一个缓冲写入器以写入套接字输出流。

    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));

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

最佳答案

第三个有点矫枉过正。

第一个是首选,因为它在通过文本到字节编码器发送数据之前缓冲数据,与一次一个字符相比,以 block 形式完成时性能更好。

OutputStreamWriter 的 javadoc甚至这样说:

For top efficiency, consider wrapping an OutputStreamWriter within a BufferedWriter so as to avoid frequent converter invocations. For example:

Writer out
  = new BufferedWriter(new OutputStreamWriter(System.out));

关于java - 实例化缓冲编写器的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36458507/

相关文章:

java - Backspace\b 关于操作系统的 Chacacter 作用域?

c++ - 尝试打印/加载二维数组时出现段错误

java - Java 具有 2 个不同字段的类的哈希码

java - JSON解析数组和同名单个对象

java - 如何使用不同的热键添加焦点遍历?

java - 如何从 docker compose 设置带有点的属性名称?

java - 为什么 java.lang.reflect.Modifier 有一个公共(public)构造函数?

java - Java 的 BufferedReader.readLine() 是否将整个文件放入内存?

c++ - 无法理解 write() 的第一个参数

vb.net - 异步 PDF 创建的 IOException 问题