尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

IO流(四)高级流——>转换流
📅 发布时间:2026/6/23 18:59:59

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

相关新闻

  • DeepSeek V4稀疏注意力DSA原理与实战优化
  • Ubuntu 20.04 下 Nextcloud Snap 部署避坑指南:SSL、权限与反向代理实战
  • CentOS 7多版本PHP共存实战:基于PHP-FPM多池与Apache反向代理

最新新闻

  • Selenium自动化测试入门:从环境搭建到实战封装
  • 深度剖析WordPress破解主题安全风险与性能优化实战
  • 在野漏洞应急响应实战指南:从预警到复盘的全流程解析
  • 扫描性能调优实战:TIMING与PERFORMANCE参数配置全解析
  • 跟着 MDN 学无障碍 Day 5:CSS 和 JavaScript 无障碍最佳实践
  • 超维空间镜像 打造营区全场景物理空间透明化数智中枢 镜像视界·空间元境全域透明数智管控总体技术方案

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号