IO总结

来源:互联网 发布:淘宝放单怎么找商家 编辑:程序博客网 时间:2024/06/02 02:56

首先是传输方向上以程序为中心,划分为输入流和输出流这两大类。其它的IO操作类都要继承这俩类的。这个继承也是符合实际情况,传输数据不是输入就是输出。然后就是按文件类型划分为字符流和字节流。字符流专用于传输字符文件,字节可以传输所有二进制文件。
两两组合起来则可得到IO流的四大类。字符输入流(Reader)、字符输出流(Writer)、字节输入流(InputStream)、字节输出流(OutputStream)

这代表这四大流的类都是抽象类,其他的各种有关IO操作都与这四大类之间存在直接或间接的继承关系。因而其各个子类大部分的名字都是以xxx开头然后以其直接或间接的父类结尾。比如如为了提高读写效率的缓存流就是以Buffer为开头如BufferInputStream、BufferReader等。还有能够传输数据并且能保留数据类型的信息的数据流以Data开头,以及可以通过序列化来进行对象的传输的对象流以Object开头。如下图所示一些常用的操作IO流的类与这几个类的继承关系如下。
这里写图片描述

而从操作文件的角度来看的话。其实各种流的操作步骤读写过程都是大同小异。
1. 先与文件建立联系也就是把文件的地址路径作为参数传入各种流当中。
2. 用一个数组进行存储文件中的字节或字符,然后将数组内容写入目的文件当中。
3. 之后就是反复的读取和写入直到读到文件的末尾。
4. 最后释放文件资源

而其他IO类都是为了让这个过程更有效率或者是对其进行某些特殊的处理。如缓存流也被称为包装流,在实例化其对象的时候需要传入一个InputStream/OutputStream的对象作为参数。就像包装一样把其他的流包含起来进行对文件的操作。其内部实现都是会创建一个内部缓冲区数组。在读取或写入流中的字节时,可根据需要从包含的输入流填充该内部缓冲区,一次读取多个字节从而提高效率并提供特有的方法来进行读写。还有对特殊的文件内容如存储对象的文件,采用特殊的操作从而使得传输和接收变得更加有针对性。因为针对此类文件的特性可以在内部封装一些特殊的方法,从而使得操作文件更加具有效率和简单。下图对文件操作做了一个简单的总结。
这里写图片描述

原创粉丝点击