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

JavaSE--IO流总览06:字符转换输入(输出)流: InputStreamReader ,OutputStreamWrite

IO流体系(学到哪扩展到哪):

学习字符转换流的目的是为了什么?

InputStreamReader---解决不同编码时字符流读取文本内容乱码的问题

OutPutStreamWrite---可以控制写出去的字符使用什么字符集编码

为什么会有乱码呢?因为读取的文件内容编码与平台运行代码默认的UTF-8编码不同导致解读出错

为什么要控制字符集编码?为了满足写的文件的编码方式

一. 字符转换输入流(InputStreamReader)

目的:解决不同编码时字符流读取文本内容乱码的问题

解决思路:先获取文件的原始字节输入流,再将其按真实的字符集编码转成字符输入流 这样字符输入流中的字符就不会乱码了

构造器: 1.new InputStreamReader(new InputStream("文件地址"))---默认utf-8

                2.new InputStreamReader(new InputStream("文件地址"),"字符集编码类型")

实例:读取下面文件的内容:注意编码“GBK”


分析:这个时候就不能上面的构造器1,因为默认UTF-8编码和文件的编码GBK不同,会乱码。就只能使用构造器2,设置解读的编码为GBK     

  2.new InputStreamReader(new InputStream("文件地址"),"GBK")

步骤

先创建低级字节输入流,再包装成字符转换输入流这个时候编写读取的编码形式,再包装成缓冲流---提速 ,最后读取代码。 

这里使用了自动关闭流的方法try-with-resource,详见传送门:http://t.csdnimg.cn/8hXRz

为什么这里是(text=br.readLine())!=null 因为readLine() 读取一行的字符数据 没有就返回null

详见传送门:http://t.csdnimg.cn/rvlP8

运行结果:

二.字符转换输出流(OutputStreamWriter)

目的:可以控制写出去的字符使用什么字符集编码

解决思路:获取字节输出流 再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码

补充刷新流知识:OutputStreamWriter与BufferedWriter一样,OutputStreamWriter也有flush()方法,可以手动刷新输出流,将缓冲区中的数据写入到目标中。但是和BufferedWriter不同的是,OutputStreamWriter是在流关闭时会自动刷新缓冲区的,所以在使用OutputStreamWriter时,不需要手动调用flush()方法来刷新输出流。只需要在不再需要使用流时,关闭流即可

构造器:OutputStreamWriter out=new OutputStreamWriter(低级字节输出流,"编码类型")

要控制写出去的字符使用什么字符集编码 该怎么做:
1.使用String提供的getByets方法解决    String date="我爱你了";bytes[] ar= date.getBytes("GBK")
2.使用  字节转换输出流  实现

这里介绍的是字符转换输出流喔:

步骤:创建低级字节输出流,再包装成字符转换输出流这个时候设置写的文件编码格式,再使用缓冲流进行包装--提速,最后就是写数据进文件

具体实例:

注意:运行第二次的时候不会追加相同的数据了,解决方法就是,在低级字节输出流创建时的地址后加true:

以上就是关于文件与代码编码不同的解决方法,至此完毕。

感谢各位大佬观看,求免费的赞和收藏关注喔!!!

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

相关文章:

  • 浙版传媒思迈特软件大数据分析管理平台建设项目正式启动
  • 漏洞——CVE简介
  • IT行业中的技术趋势与未来展望
  • 解决 webpack 配置 sass-loader后报错,无法正常build
  • CentOS中使用DockerCompose方式部署带postgis的postgresql(附kartoza/docker-postgis镜像下载)
  • 初识elasticsearch
  • react hooks--React.memo
  • App端测——稳定性测试
  • [数据结构与算法·C++] 笔记 1.4 算法复杂性分析
  • Hive parquet表通过csv文件导入数据
  • C++ 构造函数最佳实践
  • C++——关联式容器(4):set和map
  • Spring Mybatis 基本使用 总结
  • 接口幂等性和并发安全的区别?
  • 【记录一下VMware上开虚拟端口映射到公网】
  • 半导体器件制造5G智能工厂数字孪生物联平台,推进制造业数字化转型
  • 数据结构之存储位置
  • 传输层协议(TCP和UDP)
  • 智能仓库|基于springBoot的智能无人仓库管理设计与实现(附项目源码+论文+数据库)
  • 2.《DevOps》系列K8S部署CICD流水线之部署NFS网络存储与K8S创建StorageClass
  • 【数据仓库】数据仓库常见的数据模型——维度模型
  • 【Kubernetes】常见面试题汇总(三十)
  • 【Web】PolarCTF2024秋季个人挑战赛wp
  • 职业技能大赛-自动化测试笔记分享-2
  • LeetCode讲解篇之1343. 大小为 K 且平均值大于等于阈值的子数组数目
  • 电子元件制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • 【成品论文】2024年华为杯研赛E题25页高质量成品论文(后续会更新
  • 【后端】【语言】【python】python常见操作
  • 二叉树的链式结构和递归程序的递归流程图
  • 研究生如何利用 ChatGPT 帮助开展日常科研工作?