12.1.1 输入流和输出流

12.1.1 输入流和输出流

所有的程序都从用户那里接收输入、处理输入并产生输出。因此,所有的程序语言都支持读取输入和显示输出。

在Java中,把所有输入和输出都当作流来处理。流是按一定顺序排列的数据的集合。例如,字符文件、声音文件或图像文件等都可以看作是一个个的数据流。输入数据时,一个程序打开数据源上的一个流(文件或内存等),然后按顺序输入这个流中的数据,这样的流称为输入流(InputStream)。输出数据时,一个程序可以打开一个目的地的流,然后按顺序从程序向这个目的地输出数据,这样的流称为输出流(OutputStream)。输入和输出的方向是以程序为基准的。向程序输入数据的流称为输入流,从程序输出数据的流定义为输出流。通常,也把从输入流中向程序中输入数据称为读数据(read),反之,从程序中将数据输出到输出流中称为写数据(write)。

流式输入、输出的特点是数据的获取和发送均沿数据序列顺序进行,每一个数据都必须等待排在它前面的数据读入或送出之后才能被读写,每次操作处理的都是序列中剩余的未读写数据中的第一个,而不能随意选择输入输出的位置。序列中的数据既可以是未经加工的原始二进制数据,也可以是按一定编码处理后符合某种格式规定的特定数据,如字符数据,所以Java中的流有字节流和字符流之分。

采用数据流的目的是,使程序的输入输出操作独立于相关设备。因为每个设备的实现细节由系统执行完成,所以程序中不需要关注这些细节问题,使得一个程序能够用于多种输入/输出设备,不需要对源代码甚至是目标代码作任何修改,从而增加程序的可移植性。