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

IO流(四)高级流——>转换流

(2)转换流

—1、转换流基本用法
转换流

是字符流的子类,是字符流和字节流之间的桥梁,创建转换流对象(InputStreamReader)会包装一个字节流,转换流可以让该字节流变成字符流,让它拥有字符流的特性。比如:可以根据字符集一次读取多个字节,读取数据不会乱码了。而当要拷贝到文件时,创建OutputStremWriter会将字符流再次转换为字节流存入文件。

注:转换流InputStreamReader的父类是Reader,而关键:FileReader字符输入流的父类是转换流,同理输出流也一样
转换流的应用场景

1、指定字符集读写

2、字节流想要使用字符流中的方法

转换流构造方法

//构造1:默认平台编码InputStreamReader(InputStream in)

//构造2:指定编码【重点】InputStreamReader(InputStream in, String charsetName)

底层原理:

—2、转换流练习
(1)将本地文件中的GBK文件,转成UTF-8

JDK11以前必须创建转换流对象,利用转换流指定字符编码读写InputStreamReader isr = new InputStreamReader(new FileInputStream("opp-IO\\Text.txt"),"GBK");这是非常麻烦的,所

而在JDK11以后出现了替代方法

FileReader字符输入流的父类是转换流InputStreamReader,而InputStreamReader在JDK11出现了新的构造方法public InputStreamReader(File file, Charset charset)该方法的第二个参数调用Charset里面的静态方法forName是用来指定字符编码的所以转换流的子类FileReader继承子类构造方法,也可以用这种构造方法

所以要转换本地文件编码类型,不用在创建转换流对象,

FileWriter fw = new FileWriter("opp-IO\\c.txt", Charset.forName("GBK"));

package ConvertStream; import java.io.*; import java.nio.charset.Charset; public class ConvertStreamDemo1 { public static void main(String[] args) throws IOException { /* 利用转换流按照指定字符编码读取(了解即可) 因为有替代方法JDK11以后 */ //1.创建对象并指定字符编码 // InputStreamReader isr = new InputStreamReader(new FileInputStream("opp-IO\\Text.txt"),"GBK"); // //2.读取数据 // int ch; // while ((ch = isr.read()) != -1) { // System.out.print((char)ch); // } // isr.close(); /* JDK11以后得替代方法 FileReader字符输入流的父类是转换流InputStreamReader, 而InputStreamReader在JDK11出现了新的构造方法 public InputStreamReader(File file, Charset charset) 该方法的第二个参数调用Charset里面的静态方法forName是用来指定字符编码的 所以转换流的子类FileReader继承子类构造方法,也可以用这种构造方法 */ FileReader fr = new FileReader("opp-IO\\Text.txt", Charset.forName("GBK")); int ch; while ((ch = fr.read()) != -1) { System.out.print((char)ch); } fr.close(); /* 利用转换流按照指定字符编码写出(旧的方法了解即可) 因为有替代方法 */ // OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("opp-IO\\c.txt"),"GBK"); // osw.write("我是帅哥"); // osw.close(); FileWriter fw = new FileWriter("opp-IO\\c.txt", Charset.forName("GBK")); fw.write("我是帅哥"); fw.close(); } }

最终代码

import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.nio.charset.Charset; public class ConvertStreamDemo2 { public static void main(String[] args) throws IOException { /* 将本地文件中的GBK文件,转成UTF-8; */ FileReader fr = new FileReader("opp-IO\\Text.txt", Charset.forName("GBK")); FileWriter fw = new FileWriter("opp-IO\\c.txt", Charset.forName("UTF-8")); int len; char[] chars = new char[1024]; while((len = fr.read(chars)) != -1) { fw.write(chars, 0, len); } fw.close(); fr.close(); } }
(2)用字节流读取文件数据(不能出现乱码)

利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码

//1、字节流在读取中文的时候,是会出现乱码的,但是字符流可以搞定

//2、字节流里面是没有读一整行的方法的,只有字符缓冲流才能搞定

此时可以利用转换流将字节流转成字符流

InputStreamReader(字节输入流,"编码")

OutputStreamWriter(字节输出流,"编码")

转换流 = 字节流 + 编码参数

import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class ConvertStreamDemo3{ public static void main(String[] args) throws IOException { /* 利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码 //1、字节流在读取中文的时候,是会出现乱码的,但是字符流可以搞定 //2、字节流里面是没有读一整行的方法的,只有字符缓冲流才能搞定 */ /*FileInputStream fis = new FileInputStream("opp-IO\\a.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String str = br.readLine(); System.out.println(str); br.close(); */ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("opp-IO\\a.txt"))); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } }
http://www.jsqmd.com/news/1068757/

相关文章:

  • 2026工程项目协同管理平台怎么选:别让材料、签证和资金计划各管各的
  • CTLA-4:兼具自身免疫与肿瘤调控功能的核心免疫检查点靶点
  • 用友NC grouptemplet任意文件上传漏洞深度剖析与实战复现
  • $海贼王, the first Chinese Meme coin,minting on June 23, 2026 at UTC 04:00.
  • Cursor第三方模型接入:用中转服务突破上下文限制
  • AI赋能研发全链路:从需求到审查的自动化协同实践
  • polygon出题教程
  • 【剪映小助手】字幕信息生成接口(Caption Infos)
  • DiffusionGemma:用离散文本扩散和双向注意力,把推理瓶颈从内存带宽转移到算力
  • CentOS Stream 9/CentOS Stream 10配置静态IP和配置dnf/yum源
  • DeepSeek V4稀疏注意力DSA原理与实战优化
  • Claude Cowork深度解析:本地化AI智能体如何重塑macOS办公自动化
  • Vibe Coding实战:Vue3管理后台的AI协同开发流
  • 从Web命令注入到Linux SUID提权:一次完整的渗透测试实战解析
  • Crawler之Tool:Scrapling的简介、安装和使用方法、案例应用之详细攻略
  • Qwen3.7-Max原生智能体:从问答模型到自动干活的Agent跃迁
  • 家用 NAS 装好硬盘别着急用,前期优化设置教程请收好
  • 【VibeCoding系列教程16】 我的AI工具箱
  • 海量数据如何解决?位图和布隆过滤器来帮你
  • Ubuntu 20.04 下 Nextcloud Snap 部署避坑指南:SSL、权限与反向代理实战
  • Ubuntu 18.04 安装 Anaconda 兼容性问题与修复方案
  • CentOS 7多版本PHP共存实战:基于PHP-FPM多池与Apache反向代理
  • Go context.Context 原理与工程实践:控制流统一管理指南
  • 《哥你不许打我老公》小说|下载|txt
  • AScript扩展多种脚本语言
  • 《Java + Spring 实现 Hermes Agent 之龙虾、Skills、MCP 和沙箱代码执行环境思路》
  • GlusterFS冗余存储池在Ubuntu上的可靠性实践
  • 银河麒麟V10安装Wireshark:权限配置与抓包实战指南
  • Qoder CN Credits机制详解:AI编码助手的算力计量与精算实践
  • Ubuntu 20.04 + MySQL 8.0 构建三节点MGR高可用集群实战