一、 输入输出流的基本理解
1、 文件:在一个存储介质上,除了计算机的主内存,使用同一个名字保存在一起的数据称为数据文件。计算机的文件名应该能够表示文件中数据的类型以及它的用途。
2、 文件流:文件流是连接保存在物理设备上的文件和程序的一个传输路劲。每个文件流都有自己的传输模式,其决定了在传输路劲上的方向—— 也就是,路劲是用来将数据从一个文件移到程序中或将数据从程序移动到文件中。
3、 输入文件流:从一个文件接受或者读取数据到程序中的文件流,称为输入流。一个输入 文件流对象可以自动以读的模式打开与它连接的文件 ,这意味着文件中的数据可以通过程序读取,这样的文件称为输入文件。在使用输入流打开文件之前应确保文件是存在的。
4、 输出文件流:发送或写数据到一个文件中的文件流称为输出文件流。输出文件流对象可以使用写或添加两种方式之一打开它的相关文件。当输出流对象打开一个文件并准备写入数据时, 文件将默认可以从程序中接受数据 ,这个文件称为输出文件。如果已经存在一个和写文件相同的文件,原来的文件将被删除,正是这个原因,在打开一输出文件之前应检查其是否存在。以添加方式打开的输出文件将数据添加到文件尾。
二、Java 中的输入输出流类
Java中的输入输出流是按流的内容和流存储介质进行分类的。
1、按流的内容分为:字节流和字符流。
其中字节流主要处理用于与字符无关的数据。字符即意味着某种含义,所谓与字符无关就是不用关心流中每一个字节要表达什么意思。比如下载文件等对流的操作,显然是不用关心每一个字节的含义,这样的场合就非常适合用字节流来处理。
然而,有时候我们却必须知道流中某些字节的含义,比如从服务器端读取的握手信息,将流中的某些字节打印出来等等。此时,字符流就派上了用场。字符流可以按字符的形式对存储介质进行存取。字符流与字节流的区别在于 与存储介质交互的最小单位不同。
此外,字节流还可以被包装为字符流,以满足显式的读写操作。InputStreamReader 、 OutputStreamWriter 两个类就是从字节流走向字符流的桥梁。需要注意的是,无法将字符流转换为字节流。
2、按流的存储介质分为:内存、文件、管道等等。
不同存储介质的差别在于流的来源和去向不同。
(1 )内存:运行时的内存中,一般用字节数组流表示。
(2 )文件:内存之外的物理设置上的静态存储单位。
(3 )管道:线程之间的通信缓存区。
为了更好的操作流,Java 还提供了众多的修饰类型的流,当然这都基于 Java 的流包装机制下:
(1)缓冲输入输出流:提供流的存取速度。
(2)数据输入输出流:格式化读写操作。
(3)对象输入输出流:以对象为操作单位进行读写操作。
(4)压缩输入输出流:解压缩数据。