-转换流-

它是字节流和字符流之间转换的桥梁

转换流本身其实是字符流;

转换流的位置:

Snipaste_2024-02-09_09-35-03.png
分为两个:
字符转换输入流:InputStreamReader
将InputStream转换为Reader
字符转换输出流:OutputStreamWriter
将Writer转换为OutputStream


作用:

  1. InputStreamReader可将字节流先转换为字符流
    1. 可以指定字符集读写
    2. 可使用字符流中的方法了
  2. OutputStreamWriter可将字符流转为字节流

Snipaste_2024-02-09_09-40-02.png


用两个练习了解转换流:

练习一:
image.png

需求1:手动创建一个gbk的文件,把文件中的中文读取到内存中,不能出现乱码

1.首先准备一段用GBK编码的文本
image.png
image.png
放在idea中会乱码,因为idea默认使用UTF-8编码规则
image.png

2.题目要求不能出现乱码,我们可以使用字符流

题解:方法一、二

/*需求1:手动创建一个gbk的文件,把文件中的中文读取到内存中,不能出现乱码*///需求1:
//方法一:使用转化流(已过时)----
//第一个参数要创建对应的字节流对象,第二个参数要,要指定和文本编码规则相同的解码规则---GBK
InputStreamReader isr = new InputStreamReader(new FileInputStream("..\\ioDemo\\gbkfile.txt"), "GBK");
//读取数据
int b;
while ((b = isr.read()) != -1) {System.out.print((char) b);
}
isr.close();System.out.println();
System.out.println("--------------");//方法二:底层就是调用转换流
//参数1:放要读取的文件,
//参数2:调用forName方法指定解码规则GBK
FileReader fr=new FileReader("..\\ioDemo\\gbkfile.txt", Charset.forName("GBK"));
int c;
while((c=fr.read())!=-1){System.out.print((char) c);
}
fr.close();

控制台:
终于为那一身江南烟雨覆了天下
容华谢后,不过一场
今日无事,戏院听曲,插花弄玉

终于为那一身江南烟雨覆了天下
容华谢后,不过一场
今日无事,戏院听曲,插花弄玉


需求2:把一段中文按照gbk的方式写到本地文件

//方法一:/*//创建转化流对象//第一个参数要创建对应的字节流对象,第二个参数指定要写出的格式OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("..\\ioDemo\\a.txt"),"GBK");//写出数据osw.write("你好世界");//关流osw.close();*///方法二:使用字符流,底层是使用转换流//创建字符流对象FileWriter fw=new FileWriter("..\\ioDemo\\a.txt", Charset.forName("GBK"));fw.write("你好世界");fw.close();

结果:
因为idea默认是UTF-8的解码方式,所以GBK格式的文本会出现乱码
image.png


需求3:将需求2的gbk文件,转成utf-8
思路:先用GBK解码规则读取GBK文件,然后用UTF-8编码方式写出文件


//方法一:
//创建转换流输入对象------读时候用GBK
/* InputStreamReader isr=new InputStreamReader(new FileInputStream("..\\ioDemo\\a.txt"),"GBK");
//创建转换流输出对象------输出时候用UTF-8
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("..\\ioDemo\\example.txt"),"UTF-8");//因为idea默认使用UTF-8所以可不写
//读写
int b;
while((b=isr.read())!=-1){
osw.write(b);
}
//关流
osw.close();
isr.close();*///方法二:
//使用字符流,底层是使用转换流
FileReader fr=new FileReader("..\\ioDemo\\a.txt",Charset.forName("GBK"));
FileWriter fw=new FileWriter("..\\ioDemo\\example.txt",Charset.forName("UTF-8"));因为idea默认使用UTF-8所以可不写
int b;
while((b=fr.read())!=-1){
fw.write(b);
}
fw.close();
fr.close();

a.txt:
image.png
example.txt:
image.png


练习二:
Snipaste_2024-02-09_09-41-46.png

问题:
1.字节流读取中文数据会有乱码—使用字符流解决
2.字节流没有读取一行数据的方法----使用字符字符缓冲流解决
思路:先将字节流 转为字符流 再转为字符缓冲流

//创建字节流对象FileInputStream fis=new FileInputStream("..\\ioDemo\\csb2.txt");//创建转换流对象----将字节流转成字符流       转化流其实就是字符流所以可放入BufferedReader参数InputStreamReader isr=new InputStreamReader(fis);//将字符流包装成字符缓冲流BufferedReader br=new BufferedReader(isr);//循环读取每一行String s ;while((s= br.readLine())!=null){System.out.println(s);}//关流br.close();

csb2.txt:
image.png
读取结果:
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.2 Verilog 过程赋值

关键词:阻塞赋值,非阻塞赋值,并行 过程性赋值是在 initial 或 always 语句块里的赋值,赋值对象是寄存器、整数、实数等类型。 这些变量在被赋值后,其值将保持不变,直到重新被赋予新值。 连续性赋值总是处…

LeetCode Python - 6.Z字形变换

文章目录 题目答案运行结果 题目 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 之后,你的输…

Qualcomm 蓝牙耳机 FAQ(41)---------Audio 问题分析之 ACAT Tools安装

大家好! 新的一年,在此祝大家:新年快乐!工作上步步高升!!龙年大吉!!! 也欢迎大家登录大大通平台,春节期间正常更新文章,期待你的到来&#xff0…

《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)

文章目录 7.1 配置和使用 MySQL 监控工具7.1.1 基础知识7.1.2 重点案例:使用 Python 和 Prometheus 监控 MySQL 性能7.1.3 拓展案例 1:自动化 MySQL 慢查询日志分析7.1.4 拓展案例 2:实时警报系统 7.2 解读 MySQL 日志文件7.2.1 基础知识7.2.…

Qt中程序发布及常见问题

1、引言 当我们写好一个程序时通常需要发布给用户使用,那么在Qt中程序又是如何实现发布的呢,这里我就来浅谈一下qt中如何发布程序,以及发布程序时的常见问题。 2、发布过程 2.1、切换为release模式 当我们写qt程序时默认是debug模式&#x…

ICCV 2023 | 8篇论文看扩散模型diffusion用于图像检测任务:动作检测、目标检测、异常检测、deepfake检测...

1、动作检测 DiffTAD: Temporal Action Detection with Proposal Denoising Diffusion 基于扩散方法提出一种新的时序动作检测(TAD)算法,简称DiffTAD。以随机时序proposals作为输入,可以在未修剪的长视频中准确生成动作proposals。…

【爬虫作业】python爬虫作业——爬取汽车之家

爬取汽车之家期末作业: 代码如下所示: import random import timeimport requests #发送网络请求 import parsel import csv # 1.发送网络请求 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like G…

动漫风博客介绍页面源码

动漫风博客介绍页面源码,HTML源码,图片背景有淡入切换特效 蓝奏云:https://wfr.lanzout.com/iIDZu1nrmjve

Go内存优化与垃圾收集

Go提供了自动化的内存管理机制,但在某些情况下需要更精细的微调从而避免发生OOM错误。本文介绍了如何通过微调GOGC和GOMEMLIMIT在性能和内存效率之间取得平衡,并尽量避免OOM的产生。原文: Memory Optimization and Garbage Collector Management in Go 本…

codeforces 1400分

文章目录 1.[B. Phoenix and Beauty](https://codeforces.com/problemset/problem/1348/B)2.[C. Rotation Matching](https://codeforces.com/problemset/problem/1365/C)3.[C. Element Extermination](https://codeforces.com/problemset/problem/1375/C)4.[D. Epic Transform…

Java编程构建高效二手交易平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

二、Mybatis相关概念

1.对象/关系数据库映射(ORM) ORM全称Object/Relation Mapping:表示对象-关系映射的缩写ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,程序员既可以利用面向对象程序设计语言的简单易用性,又可以利用关系数…

【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习

逆向日期:2024.02.06 使用工具:Node.js 类型:webpack 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):AES加解密工具 1、打开某某…

MySQL篇----第十七篇

系列文章目录 文章目录 系列文章目录前言一、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题二、解释 MySQL 外连接、内连接与自连接的区别三、Myql 中的事务回滚机制概述前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

来自谷歌的新年礼物!速来免费领取2个月谷歌Gemini Advanced会员!价值280元!对标ChatGPT Plus!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

【iOS】——使用ZXingObjC库实现条形码识别并请求信息

文章目录 前言一、实现步骤二、扫描界面和扫描框的样式1.扫描界面2.扫描框 三、实现步骤 前言 ZXing库是一个专门用来解析多种二维码和条形码(包括包括 QR Code、Aztec Code、UPC、EAN、Code 39、Code 128等)的开源性质的处理库,而ZingObjC库…

网络编程..

1.互联网 有了互联网的出现 我们就可以足不出户的实现看电影、购物等等操作 我们认知中可能的互联网模型 较为真实的互联网模型 那么数据是如何从一个设备传递到另外一个设备的呢? 2.网络互联模型 统共有三种: 3.TCP/IP协议 TCP/IP是一群协议 里面…

【Linux笔记】动静态库的封装和加载

一、静态库的封装 我们在学习C语言阶段其实就已经知道一个可执行程序的形成过程分为预处理、编译、汇编、链接这四个阶段,而且也知道我们程序中使用的各种库其实是在链接的阶段加载的。 可我们那时候并不知道库是怎么被加载的,或者库是怎么形成的&…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(12)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(11) 4.2 PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线,其作用与PCI总线类似,主要目的是为了连接处理器系统中的外部设备…

CNN应用Keras Tuner寻找最佳Hidden Layers层数和神经元数量

介绍: Keras Tuner是一种用于优化Keras模型超参数的开源Python库。它允许您通过自动化搜索算法来寻找最佳的超参数组合,以提高模型的性能。Keras Tuner提供了一系列内置的超参数搜索算法,如随机搜索、网格搜索、贝叶斯优化等。它还支持自定义…