一、什么是IO流
IO流中的IO指的是单词Input和Output的首字母,这两个单词的意思在程序当中就是输入和输出的意思。所以,IO流用我们的话来说就是程序中的输入和输出操作。那么程序中的输入和输出分别指什么意思呢?
输入对应的就是程序当中的读取操作。这里要将程序作为参考体,也就是说当执行一个程序的时候,如果需要从这个程序之外的文件中获取数据的话,那么这个获取外部数据的过程就是读取操作,也就是Input操作,即输入流。这里要说明的是,这个所谓的外部数据是指除了本程序之外的文件当中的数据,并不局限于本机或者本机之外的数据源。就是说,在一台执行程序的计算机中,程序获取在此计算机中的不属于本程序自带的数据是读取操作,获取其他计算机中的数据也是数据的读取操作。
输出流和输入流一样,也是相对于程序来说的。当执行一个程序时,程序的运行结果往往需要进行输出,不论是将其作为其他程序的运行条件还是将这个数据进行保存,这个数据都需要进行一个”离开程序“的操作,即向别的硬件或者软件进行输出。这个操作叫做数据的写入操作。
二、数据源
数据源不能简单的理解为数据的来源,因为IO流包含了数据的输入和输出两个部分,所以数据源应该理解为数据的来源和去处。常见的数据源有数据库、其他程序、文件、内存、网络连接以及IO设备。根据在IO流中充当的角色不同,这些数据源又可以分为源设备和目标设备。源设备指的是为程序提供数据的设备,一般对应的是输入流;目标设备指的是程序数据的目的地,一般对应的是输出流。要强调的是,数据源的分类并不是死的,一个数据源在不同的程序中可能是目标设备,也有可能是源设备。比如对于同一个文件来说,当程序1要从这个文件中获取相关数据的时候它对于程序1来说就是源设备,但如果另一个程序2要向这个文件中写入数据,那么对于程序2来说这个文件就是目标设备。因此,要区分一个数据源是源设备还是目标设备,首先得分清是是对哪个程序来说的,离开了程序谈数据源的分类是没有意义的。
三、流
在上面的介绍中我们反复提及了一个概念——流。可是对于什么是流,还没有进行系统的介绍。这里首先要说一下水流和信息流的关系。水流自然不必多说,相比大家都是清楚的。那么什么是信息流呢?信息其实就是数据,因此信息流某种程度上也可以叫做数据流。在传输信息也就是数据的时候呢,为了方便理解便引用了流的概念建立了一个类似水流的数据模型用来描述数据的传输。我们把不同的设备之间的数据传输看作是在不同的设备之间建立了一个特殊的通道,在这个通道中流淌着一中特殊的”液体“——数据。这样一想,流的概念就比较清晰了。所以IO流也可以描述成以程序为中心的用来从其他设备获取或者输出数据的的流。
四、java中的四大IO抽象类
java中的IO抽总类有很多,但它们都是四大IO抽象类——InputStream/OutputStream和Reader/Writer的子类。这个四个IO抽象类被分为了两组,分别对应了IO流中的输入流和输出流。其中InputStream/OutputStream对应的是字节输入流和字节输出流,而Reader/Writer对应的是字符输入流和字符输出流。
1、InputStream字节输入流
InputStream输入流是所有字节输入流的抽象父类,它不可以被实例化,所以要实现文件的读取操作就要实例化它的子类对象。InputStream输入流的所有子类都用于向程序输入数据,并且字节单位都为8bit。
在InputStream输入流中有两个方法 read方法和close方法。其中read方法的作用是读取一个字节数据,并将这个字节数据的值作为int类型返回,如果没有读到数据,则返回值-1。而close方法的作用就是关闭对应的输入流对象,释放系统的资源避免资源的浪费。
2、OutputStream字节输出流
OutputStream字节输出流也是所有字节输出流的抽象父类。它定义的功能就是接收输出字节把那个且将这些字节发送到一个指定的目的地去。这个抽象类中也有两个write和close,write方法的作用就是向指定的目的地中写入一个字节,这方法没有返回值。而write方法的作用和InputStream中的close方法的作用一样,用于关闭字节输出流,释放系统资源避免资源浪费。
3、Reader字符输入流
Reader是用于读取的字符流抽象类,数据单位为一个字符。在这个抽象类中描述了两个方法,分别是read和close,read方法用于读取一个字符数据并将这个字符数据作为int类型进行返回。如果没有读取到数据,那么这方法将返回值-1。close方法用于关闭对应的字符输入流,释放被占用的系统资源,避免资源浪费。
4、Writer字符输出流
Writer字符输出流对应OutputStream字节输出流,它定义的功能也是将数据向数据源进行输出,不过输出的单位是字符。在Writer字符输出流中定义了连个放发,一个是writer,另一个是close。close方法的作用和以上介绍的三个IO流里的close方法一致。对于writer方法,它定义的功能也能很容易理解,就是向数据源发送以字符为单位的数据流。
本文转载自: https://blog.csdn.net/qq_59750520/article/details/140857514
版权归原作者 只吃内脏 所有, 如有侵权,请联系我们删除。
版权归原作者 只吃内脏 所有, 如有侵权,请联系我们删除。