黑马程序员技术交流社区

标题: Java IO流总结之转换流 [打印本页]

作者: fightingwang    时间: 2015-2-3 23:36
标题: Java IO流总结之转换流
1 字节流
InputStream ->FileInputStream
OutputStream ->FileOutputStream


2 . 字符流
Reader -> BufferedReader -> LineNumberReader
-> InputStreamReader -> FileReader

Writer -> BufferedWriter
-> OutputStreamWriter -> FileWriter
InputStreamReader OutputStreamWriter 为转换流,FileReader FileWriter为其子类


如何选用哪种流读取文件?
IO流分为字符流 与 字节流,根据读写文件确定使用哪一种流,比如
读取文件是否为文本:
是:用字符流
不是:用字节流

何时使用转换流?
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.
当文件是字节文件时:
读取:提高效率用BufferedReader的独有快速方法时,需要转换。FileInputStream BufferedReader
输出:提高效率一般用BufferedWriter缓存,需要转换。FileOutputStream BufferedWriter
当文件是字符流时:需要转换。
计算机处理的是字节数据
读取时:将字符转换为字节,FileReader BufferedRead
输出时:将字节转换为字符,FileWriter BufferedWriter
总之,不论是字节文件还是字符文件,提高效率一般会用转换流的。


作者: Doug    时间: 2015-2-8 00:17
提高效率是缓冲流:Bufferedxxx。转换流是InputStreamReader/OutputStreamWriter吧
作者: fightingwang    时间: 2015-2-8 17:46
Doug 发表于 2015-2-8 00:17
提高效率是缓冲流:Bufferedxxx。转换流是InputStreamReader/OutputStreamWriter吧

是的,all right




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2