目录
一、流的分类
1)按方向分:输入流,输出流(相对于虚拟机)
技巧:输入是读,输出是写
2)按单位分:字节流,字符流
字节流:按字节来读,可以读所有类型的文件
字符流:按字符来读,只能操作文本类型文件
3)按功能分:节点流,过滤流
节点流:完成数据读写
过滤流:为其他流增强功能
二、方法
输入流的方法主要是读,有三个重载,
- read():读一个字节,返回这个字节的整数值
- read(byte[] b):读一个byte数组
- read(byte[] b,int offset,int length):读byte数组中的一段,从offset开始读,读length长
输出流的方法主要是写,有三个重载,与输入流对应
- write(int b): 将指定的字节写入流中
- write(byte[] b):将b.length字节从指定的字节数组写入此输出流中
- write(byte[] b,int offset,int length):将指定的字节数组中的一段写入输出流中
三、字节流(以Stream结尾)
1)InputStream,OutputStream是所有字节流的父类,这俩个类是抽象类
2)文件字节流:FileInputStream,FileOutputStream
缓冲字节流:BufferedInputStream,BufferedOutputStream
四、字符流(以Reader、Writer结尾)
1)字符流的作用:不是为了提高效率,而是为了提供便捷,可以操作字符串
永远是越接近底层的效率越高,越往上的牺牲执行效率而提高开发效率
2)Reader、Writer是所有字符流的父类,也是抽象类
3)文件字符流:FileReader、FileWriter
缓冲字符流:BufferedReader、BufferedWriter
五、字节流与字符流的转换
将字节输入流转为字符输入流:InputStreamReader(InputStream in)
将字节输出流转为字符输出流:OutputStreamWriter(OutputStream)
六、常用的过滤流
以下过滤流都传入节点流做参数
1)缓冲流
- BufferedInputStream
- BufferedOutputStream
2)数据过滤流:对八种基本数据类型,String等进行了支持
- DataInputStream
- DataOutputStream
3)对象序列化:需要实现Serializable 接口(可以操作对象)
- ObjectInputStream
- ObjectOutputStream
七、IO操作的一般步骤
- 创建节点流
- 包装过滤流
- 完成读写
- 关闭流