目录
一、转换流
二、字节缓冲流
三、字符缓冲流
四、序列化流与反序列化流
五、打印流
六、标准输入、输出流
七、IO流总结
一、转换流
1. OutputStreamWriter 类
(1) 概述
- java.io.OutputStreamWriter继承 Writer类;就是一个字符输出流,写文本文件;
- 是字符通向字节的桥梁,将 字符流 转成 字节流
- write():字符,字符数组,字符串
(2) 构造方法
- OutputStreamWriter(OuputStream out):接收所有的字节输出流
字节输出流目前只有: FileOutputStream
- OutputStreamWriter(OutputStream out, String charsetName)
String charsetName:传递 编码表名字:GBK、UTF-8
public class OutputStreamWriterDemo { public static void main(String[] args) throws IOException { writeUTF(); } //转换流对象OutputStreamWriter写文本,采用UTF-8编码表写入 public static void writeUTF()throws IOException{ //创建字节输出流,绑定文件 FileOutputStream fos = new FileOutputStream("c:utf.txt"); //创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8 OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); //GBK可以不写 osw.write("你好"); osw.close(); //使用close()连刷新带关闭 }}123456789101112131415
2. InputStreamReader 类
(1) 概述
- java.io.InputStreamReader继承 Reader;是 字符输入流,读取文本文件
- 字节流向字符的桥梁,将 字节流 转为 字符流
- 读取的方法:read() 读取1个字符,读取字符数组
(2) 构造方法
- InputStreamReader(InputStream in):接收所有的 字节输入流
可以传递的字节输入流: FileInputStream
- InputStreamReader(InputStream in,String charsetName): 传递编码表的名字
public class InputStreamReaderDemo { public static void main(String[] args) throws IOException { readUTF(); } //转换流,InputSteamReader读取文本,采用UTF-8编码表,读取文件utf public static void readUTF()throws IOException{ //创建字节输入流,传递文本文件 FileInputStream fis = new FileInputStream("c:utf.txt"); //创建转换流对象,构造方法中,包装字节输入流,同时写编码表名 InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); char[] ch = new char[1024]; int len = isr.read(ch); System.out.println(new String(ch,0,len)); isr.close(); }}1234567891011121314151617
###3. 转换流子类父类的区别
- 继承关系OutputStreamWriter 的子类: FileWriterInputStreamReader 的子类:FileReader
- 区别
- OutputStreamWriter 和 InputStreamReader 是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流 + 编码表
- FileWriter 和 FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码。
- 以下三句话功能相同
InputStreamReader isr = new InputStreamReader(new FileInputStream(“a.txt”));//默认字符集。
InputStreamReader isr = new InputStreamReader(new FileInputStream(“a.txt”),“GBK”);//指定GBK字符集。
FileReader fr = new FileReader(“a.txt”);
注意:一旦要指定其他编码时,绝对不能用子类,必须使用字符转换流。什么时候用子类呢?
条件:1、操作的是文件。2、使用默认编码。
二、字节缓冲流
1. 概述
- 可提高IO流的读写速度
- 分为字节缓冲流与字符缓冲流