一起使用 BufferedWriter 和 BufferedOutputStream 是否太过分了?

2023-11-25

我想写入套接字。通过阅读有关网络 IO 的内容,在我看来,写入网络的最佳方法是执行以下操作:

OutputStream outs=null;
BufferedWriter out=null;
out =
  new BufferedWriter(
    new OutputStreamWriter(new BufferedOutputStream(outs),"UTF-8"));

The BufferedWriter将缓冲输入OutputStreamWriter推荐这样做,因为它可以防止编写者为每个字符启动编码器。

The BufferedOutputStream然后会缓冲来自的字节Writer以避免一次将一个字节潜在地放到网络上。

看起来有点矫枉过正,但这一切似乎都有帮助? 感谢任何帮助..

编辑:从javadoc开始OutputStreamWriter:

每次调用 write() 方法都会导致对给定字符调用编码转换器。生成的字节在写入底层输出流之前先累积在缓冲区中。该缓冲区的大小可以指定,但默认情况下它对于大多数用途来说足够大。请注意,传递给 write() 方法的字符不会被缓冲。

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

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

Buffered* 类的目的是将小型写入操作合并为较大的写入操作,从而减少系统调用的数量并提高吞吐量。

由于 BufferedWriter 已收集缓冲区中的写入,然后将缓冲区中的字符转换为另一个缓冲区,并在单个操作中将该缓冲区写入底层 OutputStream,因此已通过大型写入操作调用了 OutputStream。因此,BufferedOutputStream 找不到任何可组合的东西,而且只是多余的。

顺便说一句,这同样适用于 BufferedWriter:只有当编写器一次只传递几个字符时,缓冲才会有帮助。如果您知道调用者只写入巨大的字符串,则 BufferedWriter 将找不到任何可组合的内容,并且也是多余的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一起使用 BufferedWriter 和 BufferedOutputStream 是否太过分了? 的相关文章

随机推荐

  • 从特定父级获取 WordPress 子类别

    我正在构建一个小型缩略图库 其中包含 ID 为 406 的类别中的帖子 有些帖子属于多个类别 我不确定如何获取 406 的子类别名称 post cat 0 gt name 返回一个类别 但我只需要它来返回 406 的子级 thumbnail
  • 捕获 Ruby 方法中的变量

    在咖啡脚本中 f gt v 5 g gt v g f returns 5 as expected In Ruby def f v 5 def g v undefined local variable or method v for main
  • MySQL 基准测试

    我正在尝试使用 MySQL 基准测试来测试一些查询 但是 我遇到了错误 SELECT benchmark 10000 select title from user 作为回报我得到这个错误 ERROR 1242 21000 Subquery
  • 析构函数中是否需要删除?

    我有以下代码 我想知道是否如此delete b这里有必要吗 我的操作系统会自动清除分配的内存区域吗 class A B b A b new B A delete b 非常感谢 是的 你必须delete使用创建的每个对象new 你拥有的 在这
  • 如何使用 Spring Boot 通过 Outlook 发送邮件?

    我的 application properties 文件包含以下配置 spring mail properties mail smtp connecttimeout 5000 spring mail properties mail smtp
  • 为对话框创建阴影

    我想为我的自定义对话框创建阴影 这可能吗 GhazalActivity public void viewShareMenu Dialog share new Dialog this R style shareDialogStyle shar
  • 实体框架代码优先 IQueryable

    我正在使用实体框架代码优先 但遇到了一个小障碍 我有一个类 Person 定义如下 public class Person public Guid Id get set public virtual ICollection
  • Android Facebook Api 异常 - Remote_app_id 与存储的 id 不匹配

    我有一个问题 如本文标题所示 我无法登录 SessionState currentstate session getState 给我一个状态CLOSED LOGIN FAILED 我看了这个帖子 Android Facebook SDK 3
  • Windows 批量检查变量是否以特定字符串开头、结尾并包含特定字符串

    我正在尝试检查批处理文件中的变量是否以 包含BETA某处并结束于 是否可以 如果是的话 有人可以帮我吗 假设您的变量不包含任何换行符或回车符 那么所需要的只是一个 FINDSTR 命令 它具有有限的正则表达式支持 足以解决这个问题 echo
  • data.table 设置 key 时如何对字符串进行排序

    昨天我不得不花一些时间试图找到我的代码中的错误 我发现data tablepackage 对字符串的排序方式与 base 略有不同 这是正常行为吗 最有效的方法是什么 其优点是data table 重现使用碱基获得的结果order功能 这是
  • 如何将 SQLite SQL 转储文件转换为 PostgreSQL?

    对于开发 我使用 SQLite 数据库并在 PostgreSQL 中进行生产 我用数据更新了本地数据库 并且需要将特定表传输到生产数据库 Running sqlite database dump gt the path to sqlite
  • 是否可以将 Windows CRITICAL_SECTION 对象配置为拒绝递归访问?

    默认情况下 CRITICAL SECTION 对象是递归的 是否可以像 pthread 互斥体一样配置此行为以启用或禁用递归线程访问 针对评论进行澄清 我特指 Windows CRITICAL SECTION 对象 而不是 Windows
  • AngularJS 页面内多个 ng-app

    我刚刚开始学习 Angular JS 并创建了一些基本示例 但是我遇到了以下问题 我创建了 2 个模块和 2 个控制器 shoppingCart gt ShoppingCartController namesList gt NamesCon
  • Haskell 中的运算符优先级

    我对 Haskell 中运算符优先级的规则感到困惑 更具体地说 这是为什么 Main gt 2 3 mod 2 0 与此不同 Main gt 2 mod 3 2 2 函数调用绑定最紧密 所以 2 mod 3 2 是相同的 2 mod 3 2
  • 连接两个独立数据库的结果

    是否有可能JOIN来自两个独立的 postgres 数据库的行 我正在使用一台服务器上有几个数据库的系统 有时我真的需要这样的功能 根据http wiki postgresql org wiki FAQ 除了当前数据库之外 无法查询其他数据
  • 在确定菜单项的放置位置时是否有任何标准可遵循?

    在开发基于Windows窗体的应用程序时 设计窗体的主菜单系统时是否应该遵循一些标准 大多数带有菜单系统的 Windows 应用程序都会有标准的文件 编辑 查看 工具 帮助菜单 您如何确定任何其他顶级菜单项的位置 另外 如何确定子菜单项的放
  • 纯CSS折叠/展开div

    我有一个纯CSS可折叠div 它基于其他人使用的代码 target伪类 我想要设置的是一个包含 12 个以上问题的页面 当您单击 按钮时 答案 div 会在下面展开 如果不编写大量额外的 CSS 我无法弄清楚如何在此页面上制作多个折叠 di
  • 需要一个解释如何使用 PHPUnit 的网站 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找教程 optimally with Zend Framework 关于如何使用PHPUnit 我在上面找到了一对google但还没有安静地理解它 您正在寻找的是袖珍指南 它
  • 如何设置表视图单元格附件视图以保留先前初始化的 UIImageView?

    假设我的视图控制器中有一个属性 定义如下 property nonatomic retain UIImageView checkmarkOffAccessoryView I synthesize这在实施中 release it in dea
  • 一起使用 BufferedWriter 和 BufferedOutputStream 是否太过分了?

    我想写入套接字 通过阅读有关网络 IO 的内容 在我看来 写入网络的最佳方法是执行以下操作 OutputStream outs null BufferedWriter out null out new BufferedWriter new