当前位置: 首页 > news >正文

java 比Scanner 更高效的输入输出 BufferedWriter和`OutputStreamWriter

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

当我们在 Java 中需要进行字符输出时,可以使用 BufferedWriterOutputStreamWriter 的组合来实现。下面提供更多相关信息:

  1. BufferedWriter

    • BufferedWriter 提供了缓冲区的功能,将字符数据写入缓冲区,然后批量写入底层输出流,减少了频繁的写入操作,提高了性能。

    • 它提供了一些便捷的写入方法,如 write(char[] cbuf)write(String str)newLine() 等,可以方便地进行字符数据的写入和换行操作。

    • 使用完毕后,应及时调用 flush() 方法将缓冲区的数据刷新到底层输出流,确保数据被完全写入。

  2. OutputStreamWriter

    • OutputStreamWriter 是一个字符流与字节流之间的转换器,将字节流转换为字符流。

    • 它可以指定字符编码,将字节流按照指定编码转换为字符流,以便正确地处理不同字符编码的数据。

    • 在构造方法中,可以传入一个字节输出流对象,如 System.out(标准输出流)或 FileOutputStream(文件输出流),将其转换为字符输出流。

    • 若不指定字符编码,默认使用平台的默认字符编码。

通过将 OutputStreamWriter 对象作为参数传递给 BufferedWriter 的构造方法,我们可以实现字符数据的输出,并通过缓冲区提高写入效率。

这种组合的优点是可以方便地进行字符输出,并通过缓冲区减少底层资源的频繁交互,提高性能。同时,由于 BufferedWriter 继承自 Writer 类,还可以使用 Writer 的其他方法来进行字符输出操作。

需要注意的是,在使用完毕后,应该及时关闭和释放相关资源。对于 BufferedWriterOutputStreamWriter,可以调用 close() 方法来关闭字符流,它们会自动关闭底层的输出流。

总结:BufferedWriterOutputStreamWriter 的组合提供了一种方便高效的方式来进行字符输出,允许我们写入字符数据并通过缓冲区提高性能。

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Scanner;public class H {public static void main(String[] args) throws Exception{Scanner sc = new Scanner(System.in);BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));int k = sc.nextInt();while(k-->0){int n = sc.nextInt();if(n==3){bw.write("Fak\n");}else {bw.write("Bingbong\n");}}bw.flush();//将缓冲区的数据刷新到底层输出流,确保数据被完全写入bw.close();//关闭字符流释放相关资源}
}

相关文章:

  • NoSQL是什么?NoSQL数据库存在SQL注入攻击?
  • Python知识点17---包
  • 树莓派通过PCA9685控制FT2331M舵机(Python)
  • python 构造函数
  • 【mybatis解决oracle查询in超过1000条数据】
  • Redis数据类型(上篇)
  • vue+antd实践:在输入框光标处插入内容
  • P9 【力扣+知识点】【算法】【二分查找】C++版
  • Cocos入门2:软件安装
  • Spring MVC 工作流程源码分析
  • Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250
  • 新能源汽车推行精益生产:绿色动力下的效率革命
  • 使用Lua基本实现分布式锁并自动续期
  • 代码随想录35期Day54-JavaScript
  • 通过LabVIEW提升生产设备自动化水平
  • 收藏网友的 源程序下载网
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C学习-枚举(九)
  • Druid 在有赞的实践
  • k8s如何管理Pod
  • Netty源码解析1-Buffer
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Travix是如何部署应用程序到Kubernetes上的
  • vue总结
  • windows下如何用phpstorm同步测试服务器
  • 从0到1:PostCSS 插件开发最佳实践
  • 代理模式
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 前端相关框架总和
  • 世界上最简单的无等待算法(getAndIncrement)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​​​​​​​​​​​​​​Γ函数
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​queue --- 一个同步的队列类​
  • (003)SlickEdit Unity的补全
  • (zt)最盛行的警世狂言(爆笑)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二十三)Flask之高频面试点
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net Redis的秒杀Dome和异步执行
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 中viewstate的原理和使用
  • .net后端程序发布到nignx上,通过nginx访问
  • @Responsebody与@RequestBody
  • [17]JAVAEE-HTTP协议