io简介
java io是为了实现“文件”,“控制台”,“网络设备”这些输入输出设备之间的通信而设计的系统。例如,对于一个文件,我们可以打开进行读取与输出。在java1.0的时候,java提供的类都是以字节(byte)为单位,到了java1.1,为了国际化,添加了许多以字符(Unicode)为单位进行操作的类
IO中我们常说到的一个概念是“流”,所谓“流”就是一种抽象的数据总称,本质是为了进行传输。
1)按照流的数据流向,可以分为输入流和输出流
2)按照流中的数据单位,可以分为字节流和字符流
IO框架
1,以字节为单位的输入流框架图。
- InputStream是以字节为单位的输入流的超类。InputStream提供了read()方法从输入流读取字节数据
- ByteArrayInputStream是字节数组输入流。它包含有一个缓冲区,该缓冲区包含从流中读取的数据,通俗点说,他的内部缓冲区就是一个字节数组,而ByteArrayInputStream就是通过字节数组实现的
- PinpedInputStream是管道输入流,他一般和PinpedOutputStream搭配使用,能实现多线程间的管道通信
- FilterInputStream是过滤输入流,他是BufferdInputStream和DataInputStream的父类
- DataInputStream是数据输入流,它是用来装饰其他输入流,他允许程序以机器无关方式从底层输入流中读取基本java类型
- BufferedInputStream是缓冲输入流,他的作用是为另一个输入流添加缓冲功能
- File是文件和目录路径名的抽象表示形式。注意两点,a)File不仅仅表示文件,也可以表示目录b)File的父类是Object,不是inputStream
- FileDescriptor是“文件描述符”,可以用来表示开放文件,开放套接字等
- FileInputStream是文件输入流, 通常用来对文件进行读取操作
- ObjectInputStream是对象输入流,和ObjectOutputStream一起,用提供对基本数据或者对象的持久存储
2,以字节为单位的输出流的框架图
- OutPutStream是以字节为单位的输出流的超类,OutPutStream提供了write()方法从输出流中写入字节数据
- ByteArrayOutputStream是字节输出流,写入ByteArrayOutputStream的数据被写入到一个byte数组,可以使用toByteArray,toString获取数据
- PipedOutPutStream是管道输出流,他和PipedInPutStream配合使用,能够实现多线程的管道通信
- FilterOutputStream是过滤输出流,另外俩类的父类
- DataOutputStream是数据输出流用来装饰其他输出流,他允许程序以机器无关方式从底层输入流中读取基本java类型
- BufferedOutputStream是缓冲输出流,他的作用是为另一个输出流添加缓冲功能
- PrintStream是打印输出流,能为其他输出流添加功能,方便打印
- FileOutputStream是文件输出流,常常用于文件写入操作
- ObjectOutputStream是对象输出流,和ObjectInputStream一起,用来提供对基础数据或者对象的持久存储
3,以字节为单位的输入流和输出流关联的框架图
4,以字符为单位的输入流框架图
- Reader是字符为单位的输入流的超类,提供了read方法来读取字符数据
- CharArrayReader是字符数组输入流,用于读取字符数组,操作的数据是以字符为单位
- PipedReader是字符类的管道输入流,和PipedWriter一起通过管道进行线程间的通信,在使用管道通信是吗,这两个类必须一起使用
- FilterReader是字符类型的过滤输入流
- BufferedReader是字符缓冲输入流,他的作用是为另外一个输入流添加缓冲功能
- InputStreamReader是字节转字符的输入流,是字节和字符流的桥梁,它使用指定的charset读取字节并将其解码为字符
- FileReader是字符类文件的文件输入流,常用于对文件进行读取操作
5,以字符为单位的输出流框架图
- Writer 是以字符为单位的输出流的超类。它提供了write()接口往其中写入数据。
- CharArrayWriter 是字符数组输出流。它用于读取字符数组,它继承于Writer。操作的数据是以字符为单位!
- PipedWriter 是字符类型的管道输出流。它和PipedReader一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedWriter配套使用。
- FilterWriter 是字符类型的过滤输出流。
- BufferedWriter 是字符缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
- OutputStreamWriter 是字节转字符的输出流。它是字节流通向字符流的桥梁:它使用指定的 charset 将字节转换为字符并写入。
- FileWriter 是字符类型的文件输出流。它通常用于对文件进行读取操作。
- PrintWriter是字符类的打印输出流,用来装饰其输出流,使其能够方便地打印
6,以字符为单位的输入流和输出流的关联框架图
7,字节和字符输入流对应关系
8,字节和字符输出流对应的关系
9,字节流与字符流的转换
有时候字节流和字符流需要相互转换,有两个类InputStreamReader和OutputStreamWriter,用来进行字符流和字节流之间的转换。
InputStreamReader用于讲一个字节流中的字节解码为字符
OutputStreamReader用于将写入的字符编码成字节后吸入一个字节流