FileReader与InputStreamReader

本文探讨FileReader在字符流读取中的角色,尤其是在不同编码情况下的适用性。它并非多余,当编码一致时提供便利,但主要价值在于与InputStreamReader的区别和特定场景的效率考量。

今天梳理IO笔记时发现一个问题–FileReader是鸡肋吗,它有用吗???

在使用字符流读取文本文件时(且不使用包装流时),有两种类提供读取文件方法,分别是InputStreamReader和FileReader,后者为前者子类。

引言–当文本文件编码与编译工具默认编码不同时,FileReader类的方法读取文件会出现乱码的情况,这时需要用到转换流InputStreamReader的InputStreamReader(InputStream in, String charsetName) 方法。

作为转换流的子类,FileReader功能不是应该比父类丰富吗?

查看API得知:

FileReader构造方法比父类少且没有一个新方法,全是继承来的方法。
那么FileReader存在的意义是什么呢?

当字符文件编码与默认编码相同时,FileReader比InputStreamReader更加便利(可能是当遇到海量字符文件读取时,FileReader的效率更高吗?)

在这里插入图片描述

FileReader优点仅此而已吗?本人不得而知,知道的请在评论区留下足迹。

接下来就轮到转换流了

回到引言说的话,我们来思考这个问题。

何时使用转换流?

1.如果使用非默认编码保存文件或者读取文件时,需要用到转换流,因为字节流的重载构造方法中有指定编码格式的参数,而FielReader 与 FileWriter 是默认编码的文本文件

比如:
当我们使用默认GBK编码保存文本时,下面2句代码其实是一样的效果,
new OutputStreamWriter(new FileOutputStream(“out.txt”))
new FileWriter(“out.txt”)

当要求保存为其他编码比如UTF-8时,就要这样写
new OutputStreamWriter(new FileOutputStream(“out.txt”),“UTF-8”)

而如果要读取一个UTF-8编码的文本文件时,同样的要用
new InputStreamReader(new FileInputStream(“in.txt”),“UTF-8”);

而不能用new FileWriter(“in.txt”)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值