具体操作分成面向字节(Byte)和面向字符(Character)两种方式。如下图所 示:
IO流的三种分类方式
1.按流的方向分为:输入流和输出流;
2.按流的数据单位不同分为:字节流和字符流;
3.按流的功能不同分为:节点流和处理流。
IO流的层次结构
IO流的常用基类有:
字节流的抽象基类:InputStream和OutputStream;
字符流的抽象基类:Reader和Writer。
注意:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀,以前缀为其功能。例如,InputStream的子类——FileInputStream,Reader的子类——FileReader。
1) 字节流:
InputStream 与 OutputStream;
InputStream 是所有字节输入流的父类,其定义了基础的读取方法;
OutputStream 是所有字节输出流的父类,其定义了基础的写出方法包含:文件流:FileOutputStream 是文件的字节输出流,我们使用该流可以以字节为单位将数据写入文件(默认覆盖模式,第二个参数设施为 true 可改变为追加模式)。FileInputStream 是文件的字节输入流,我们使用该流可以以字节为单位读取文件内容。
缓冲流:BufferedOutputStream 缓冲字节输出流,需使用flush方法将缓存的字节写出或者在关闭流时一次性写出。BufferedInputStream 是缓冲字节输入流。
对象流:ObjectOutputStream 是用来对对象进行序列化的输出流。ObjectInputStream 是用来对对象进行反序列化的输入流。
2) 字符流:Reader 和 Writer;
Reader 是所有字符输入流的父类。
Writer 是所有字符输出流的父类。
字符流是以字符 (char) 为单位读写数据的。一次处理一个 unicode。字符流都是高级流,其底层都是依靠字节流进行读写数据的。
包含:转换流:InputStreamReader:字符输入流,使用该流可以设置字符集 OutputStreamWriter:字符输出流,使用该流可以设置字符集字符缓冲流:PrintWriter 具有自动行刷新的缓冲该字符输出流,需第二个参数设置为 true。
BufferedReader 是缓冲字符输入流;
注::PrintWriter 写出字符串时我们通常不使用 Writer 提供的 write( ) 相关方法,而是使用重载的 print 和println 方法。
BufferedReader 读取字符串时可以使用 readLine( ) 连续读取一行字符串,直到读取到换行符为止,返回的字符串中不包含该换行符,未读到返回 null。
3)序列化流:ObjectInputStream和ObjectOutputStream;
对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程。既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接口。(查看源码可得知:Serializable接口没有任何的方法,只是作为一个标识接口存在)。