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

Java重修笔记 第六十四天 坦克大战(十四)IO 流 - 标准输入输出流、InputStreamReader 和 OutputStreamWriter

  • 标准输入输出流
1. System.in 标准输入流

        本质上是一个InputString,对应键盘,表示从键盘输入。

        定义:public final static InputStream in = null;

        所以 Scanner scanner = new Scanner(System.in); 会从键盘中获取数据

2. System.out 标准输出流

        本质上是一个OutputStream,对应显示器,不过被包装成了PrintStream,表示在显示器上输出。

        定义:public final static PrintStream out = null;

        所以 System.out.println(); 就是使用 out 对象将数据输出到显示器上。

  • 转换流

1. 为了解决使用读写源文件时出现的乱码问题(字符编码不一致),引出转换流

2. InputStreamReader 是 Reader 的子类,代码可以将 InputStream 字节流包装(转换)成指定编码的 Reader 字符流

3. OutputStreamWriter 是 Writer 的子类,可以将 OutputStream 字节流包装(转换)成指定编码的 Writer 字符流

4. 当处理存文本数据时,使用字符流的效率更高

  • InputStreamReader 类的常用方法
1. 使用特定编码方式包装字节输入流的构造方法

        public InputStreamReader(InputStream in, Charset cs)

        参数:in - 一个 InputStream 子类下的输入流

                   cs - 一个字符串类型的字符集

2. 获得该转换流所使用的编码方式

        public String getEncoding()

3. 关闭流

        public void close() throws IOException

        说明:不管包装了多少个流,只需要关闭最外层的流就行

public class InputStreamReader01 {public static void main(String[] args) throws IOException {// 演示使用转换流解决中文乱码的问题, 通过转换流 将字节流 转换成指定编码的字符流String filePath = "d:\\a.txt";FileInputStream fis = new FileInputStream(filePath);// 将字节流转换成转换流// InputStreamReader isr = new InputStreamReader(fis, "UTF-8");InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);// 将转换流又转换成包装流BufferedReader br = new BufferedReader(isr);// 读取String s = br.readLine();System.out.println("编码方式为: " + isr.getEncoding());System.out.println("读取到的第一行为: " + s);br.close();}
}

  • OutputStreamWriter 类的常用方法

1. 使用特定编码方式包装字节输出流的构造方法

        public OutputStreamWriter(OutputStream out, Charset cs)

        参数:out - 一个 OutputStream 子类下的输出流

                   cs - 一个字符串类型的字符集

2. 关闭流

        public void close() throws IOException

        说明:不管包装了多少个流,只需要关闭最外层的流就行,如果不关闭或刷新流,东西写不进去

public class OutputStreamWriter01 {public static void main(String[] args) throws IOException {String filePath = "d:\\a.txt";FileOutputStream fos = new FileOutputStream(filePath, true);OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);BufferedWriter fw = new BufferedWriter(osw);fw.newLine();fw.write("通过转换流写入");fw.close();}
}

http://www.lryc.cn/news/456764.html

相关文章:

  • prctl的函数和pthread_self函数
  • Vim 命令行模式下的常用命令
  • 【动态规划-最长递增子序列(LIS)】力扣2826. 将三个组排序
  • Elastic Stack--16--ES三种分页策略
  • [LeetCode] 315. 计算右侧小于当前元素的个数
  • 【hot100-java】二叉树展开为链表
  • 如何在在 YOLOv3模型中添加Attention机制
  • 单点登录Apereo CAS 7.1安装配置教程
  • windows C++-移除界面工作线程(一)
  • Qt小bug — LINK : fatal error LNK1158: 无法运行“rc.exe“
  • c++小游戏
  • k8s为什么用Calico
  • HashMap 和 Hashtable 有什么区别?
  • 【机器学习】深度学习、强化学习和深度强化学习?
  • fastadmin 多商户模式下侧边栏跳转路径BUG
  • java内置的四种函数式接口
  • 如何获取 uni-app 应用发布所需的证书、私钥与配置文件
  • TCP网络通信——多线程
  • 【exp报错注入】
  • 基于SpringBoot问卷调查系统小程序【附源码】
  • LLM - 配置 GraphRAG + Ollama 服务 构建 中文知识图谱
  • 简单认识redis - 6 redis 存储速度快的原因
  • 【Qt Quick】状态:State 使用
  • ICE/TURN/STUN/Coturn服务器搭建
  • ctf.bugku-eval
  • Extreme Compression of Large Language Models via Additive Quantization阅读
  • 【虚拟化】内核级虚拟化技术KVM介绍,全/半虚拟化的区别,使用libvirt搭建虚拟化平台(go/java/c++)
  • C++类成员变量的初始化
  • Golang 中的强大 TUI 库 ——tview
  • 电层相关 -- 支路板与线路板