今天梳理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”)