------- android培训、java培训、期待与您交流! ----------
java.lang.Object java.io.Reader java.io.InputStreamReader java.io.FileReader
如何选用哪种流读取文件?
io流分为字节流和字符流,根据文件的内容,选取适用的输入输出流:
对于像.txt、.java、.c、.bat等之类的文件可以选取字符流,读出的内容是可读的。
对于像.mp3、.avi、.rmvb等文件,这些是二进制文件,如果以字符流读取会出现乱码现象。
何时使用转换流?
如果使用非默认编码保存文件或者读取文件时,需要用到转换流,因为字节流的重载构造方法中有指定编码格式的参数,而FileReader 与 FileWriter 是默认编码的文本文件
比如:
当我们使用默认GBK编码保存文本时,默认情况下下面的两条是一样的
new OutputStreamWriter(new FileOutputStream("out.txt"))
new FileWriter("out.txt")
当要求保存为其他编码比如GBK时,就要这样写
new OutputStreamWriter(new FileOutputStream("out.txt"),"GBK")
而如果要读取一个GBK编码的文本文件时,同样的要用
new InputStreamReader(new FileInputStream("in.txt"),"GBK");
而不能用new FileWriter("in.txt")
2.
当文件是字节文件时:
读取:FileInputStreamBufferedReader
输出:FileOutputStream BufferedWriter
当文件是字符流时:需要转换。
计算机处理的是字节数据
读取时:将字符转换为字节,FileReader BufferedRead
输出时:将字节转换为字符,FileWriter BufferedWriter
总之,不论是字节文件还是字符文件,提高效率一般会用转换流的。
重要:而且Java内部处理字节流时,使用的是默认编码,Java在写入时,假如设置的编码非默认编码,将非默认编码的串传递给Java内部,Java内部将编码转换为默认编码的串,写入文件或者网络时,再将默认编码的串转换为用户设置的非默认编码。Java这样做,是为了编码的统一性。