1、IO操作是一个相对的过程
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。
1)程序需要数据:把数据流入到程序中—>输入.
2)程序需要保存数据,把数据传递给别人—>输出.
IO流的分类
站在不同的角度,IO的分类方式是不一样的:
1):根据流向划分: 输入流和输出流.
2):根据数据的单位划分: 字节流和字符流.
3):根据功能的划分:节点流和包装流.
四大基流:
1)字节输出流OutPutStream
2)字节输入流InPutStream
3)字符输出流Writer
4)字符输入流Reader
四大基流都是抽象类: 其他流都是继承于这四大基流的
我们不能创建四大基流的对象,只能创建其子类对象
五、输入流Java中用来表示输入流的类分为两种 分别是字节输入流InputStream类和字符输入类Reader类
字符流和字节流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:
-
读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
-
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
-
字节流:一次读入或读出是8位二进制。
-
字符流:一次读入或读出是16位二进制。
InputStream类是字节输入流的抽象类,是所有字节输入流的父类
字节流:(InputStream:)针对二进制文件:
--InputStream
--FileInputStream
--BufferedInputStream
--ObjectInputStream OutputStream
--FileOutputStream
--BufferedOutputStream
--ObjectOutputStream
Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类
字符流:针对文本文件,读写容易发生乱码现象,在读写时应指定编码集为UTF-8
-- Writer
-- BufferedWriter
-- OutputStreamWriter Reader
-- BufferedReader
-- InputStreamReader
-- PrintWriter/PrintStream
输出流OutputStream类是字节输入流的抽象类,此抽象类表示输出字节流的所有类的超类。
,提供了write()函数从输出流中读取字节数据。
Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。
总结
- 输入流:InputStream或者Reader:从文件中读到程序中;
- 输出流:OutputStream或者Writer:从程序中输出到文件中;