在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(8位二进制为一个字节)的形式存在,I/O流中针对字节的输入和输出提供了一系列的流,统称为字节流。字节流是程序中最常见的流,根据数据传输方向可将其分为字节输入流和字节输出流。在JDK中,提供了两个抽象类,InputStream和OutputStream,它们是字节流的顶级父类。为了方便理解,可以把InputStream和OutputStream比作两根“水管”。

InputStream被看成是一个输入管道,OutputStream被看成是一个输出管道,数据通过InputStream从源设备输入到程序中(内存),通过OutputStream从程序(内存)输出到目标设备中,从而实现数据的传输。由此可见,I/O流的输入和输出都是相对于程序而言的。

上图列举了InputStream的四个常用方法,前三个read()方法都是用来读数据的,其中,第一个read()方法是从输入流中逐个读入字节,而第二个和第三个read()方法则将若干个字节以字节数组的形式一次性读入,从而提高读数据的效率。在进行I/O流操作时,当前I/O流会占用一定的内存,由于系统资源的宝贵,因此,在I/O操作结束后,应该调用close()方法关闭流,从而释放当前I/O流所占用的系统资源。

上图列举了OutputStream类的五个常用方法,前三个是重载的write()方法,都是用来向输出流写入字节,其中,第一个方法逐个写入字节,后两个方法是将若干个字节以字节数组的形式一次性写入,从而提高写数据的效率,flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。close()方法是用来关闭流并且释放与当前I/O流相关的系统资源。
网友评论