IO流原理及流的分类
I/O框架
在程序的运行中,jvm内存中必然存放很多的数据,包括基本类型和对象类型,但是当程序借宿 ,jvm关闭时,这些数据必然也会消失,所以我们希望通过某种方式能够保存下来,已备使用。将数据存入文件,或者通过网络发送出去或者存入数据库,而将保存的数据重新读回jvm,将jvm的数据写出去,将数据读入,java中解决这些问题的api称为I/O
IO流原理
I/O是Input/Output的缩写,I/O技术是非常使用的技术,用于处理数据传输,如读/写文件,网络通讯等
java程序中,对于数据的输入/输出操作以流(stream)的方式进行
java.io包下提供了各种“流”类的接口。用于获取不同种类的数据,并通过方法输入或输出数据
输入(input):读取外部数据(磁盘、光盘等储存设备的数据)到程序(内存)中
输出(output):将程序(内存)数据输出到磁盘、光盘等存储设备中
流的分类
- 按操作数据单位不同分为:字节流(8bit)主要应用二进制文件,字符流(按字符)文本文件
- 按数据流的流向不同分为:输入流、输出流
- 按流的角色的不同分为:节点流、处理流/包装流
抽象基类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
注释:
- InputStream、OutputStream、Reader和Writer都是抽象类,不能单独创建,只能利用他的实现子类创建相应的流对象
文件和流的区别
文件理解图
流理解图
外卖小哥帮我们运送物品,将物流中心的物品送到用户的手中,想要退货交给外卖小哥,退回到物流中心
外卖小哥相当于输入流和输出流
物流中心的物品相当于磁盘里的文件
既然有了字节流,还要有字符流
字符流是java虚拟机将字节转换得到的,这个过程比较耗时,并且不知道编码类型很容易出现乱码问题。所以I/O流就直接提供了一个直接操作字符的接口,方便平时对字符进行流操作