IO流学习总结(下)---转换流(重要)
发布日期:2021-09-10 08:04:01
浏览次数:7
分类:技术文章
本文共 2402 字,大约阅读时间需要 8 分钟。
参考[大佬的博客][
分为两种:
- InputStreamReader 字节流转字符流
- OutputStreamWriter 字符流转字节流 *写入数据–>内存中的字符数据–>字符流–>OutputStreamWriter–>字节流–>网络传输(或文件保存) 读取数据<–内存中的字符数据<–字符流<–InputStreamReader<–字节流<–网络传输(或文件保存) 可以清楚地发现,不管如何操作,最终全部是以字节的形式保存在文件中或者进行网络传输。*
FileWriter和FileReader的说明
从JDK文档中可以知道FileOutputStream是OutputStream的直接子类。FileInputStream也是InputStream的直接子类,但是在字符流文件的两个操作类却有一些特殊,FileWriter并不直接是Writer的子类,而是OutputStreamWriter的子类,而FileReader也不直接是Reader的子类,而是InputStreamReader的子类,那么从这两个类的继承关系就可以清楚的发现,不管是使用字节流还是字符流实际上最终都是以字节的形式操作输入输出流的。也就是说,传输或者从文件中读取数据的时候,文件里真正保存的数据永远是字节。
转换流的作用:
1. 如果目前所 获取到的是一个字节流需要转换字符流使用,这时候就可以使用转换流。 字节流—-> 字符流 2. 使用转换流可以指定编码表进行读写文件。InputStreamReader构造函数可以传递字节流
很显然可以包装我们的字节流,自动的完成节流编码和解码的工作。//使用输入字节流的转换流指定码表进行读取文件数据public static void readTest2() throws IOException{ File file = new File("F:\\a.txt"); FileInputStream fileInputStream = new FileInputStream(file); //创建字节流的转换流并且指定码表进行读取 InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8"); char[] buf = new char[1024]; int length = 0; while((length = inputStreamReader.read(buf))!=-1){ System.out.println(new String(buf,0,length)); }}**OutputStreamWriter** 只给了我们一个字节流 我们要用字符流来输出//使用输出字节流的转换流指定码表写出数据public static void writeTest2() throws IOException{ File file = new File("F:\\a.txt"); //建立数据的输出通道 FileOutputStream fileOutputStream = new FileOutputStream(file); //把输出字节流转换成字符流并且指定编码表。 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8"); outputStreamWriter.write("新中国好啊");//意思就是 字节流转换成字符流输出字符 但是最终还是以字节流形式保存的 //关闭资源 outputStreamWriter.close();}总结:
1、重点:操作的终端点实际上都是以字节的形式进行的。
2、FileWriter和FileReader两个子类的定义,其实是中间使用了转换类。 3. 可以使用缓冲流来需要注意的事项
InputStreamReader、OutputStreamWriter实现从字节流到字符流之间的转换,使得流的处理效率得到提升,但是如果我们想要达到最大的效率,我们应该考虑使用缓冲字符流包装转换流的思路来解决问题。比如:BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static void readTest() throws IOException{ InputStream in = System.in; //获取了标准的输入流。// System.out.println("读到 的字符:"+ (char)in.read()); //read()一次只能读取一个字节。 //需要把字节流转换成字符流。 InputStreamReader inputStreamReader = new InputStreamReader(in); //使用字符流的缓冲类 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line = null; while((line = bufferedReader.readLine())!=null){ System.out.println("内容:"+ line); } }
转载地址:https://blog.csdn.net/weixin_34378767/article/details/89721305 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月18日 06时11分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
AcWing - 双链表(模拟)
2019-04-28
AcWing - KMP字符串(KMP)
2019-04-28
来一个总结吧
2019-04-28
有趣的句子
2019-04-28
每天一道 python 面试题 - Python中的元类(metaclass) 详细版本
2019-04-28
Scrapy(6)Item loader 加载器详解
2019-04-28
每日一道python面试题 - Python的实例,类和静态方法揭秘
2019-04-28
今日金融词汇---新股新债前面的N,是什么?
2019-04-28
每日一道python面试题 - Python的实例,类和静态方法揭秘
2019-04-28
原创专辑来了
2019-04-28
好好做好你喜欢做的事情,并且把它做好
2019-04-28
反馈不足
2019-04-28
人生永远没有太晚的开始
2019-04-28
python 周日福利来了
2019-04-28
状态模式
2019-04-28
跳表SkipList
2019-04-28
跳跃表(Skip list)原理与java实现
2019-04-28
Java 常见的 30 个误区与细节
2019-04-28
干货|基于 Spring Cloud 的微服务落地
2019-04-28
WEB攻击手段及防御第2篇-SQL注入
2019-04-28