Java IO系列之初始IO

来源:互联网 发布:淘宝兼职美工怎么收费 编辑:程序博客网 时间:2024/06/07 14:28


什么是IO流?

       IO指的是输入/输出(Input/Output),而流是一种抽象概念,这里我们可以把流想像成是一条长河,在上游有一水库提供水源,河边住着一户人,随时都可以从河边取到水,同时,这户人也可以把一些废水倒进河里,使得废水可以流进大海。这里所提到的河就是一个数据的流动通道,而水库就好比是计算机上的一切数据源,包括磁盘文件,内存,IO设备,键盘等等,河边上的用户就是程序,它能随时随地从流中取得数据,只要有数据源挂接到这个通道上可以。而大海就是程序处理完数据后要流向的目的地,这些目的地包抱磁盘文件,内存,IO设备,显示器等,这些目的地只是相对程序来说的,它们也可能是别的进程的输入流。但计算机中的流指的是数据的一种传输方式,它代表了数据的无结构化传输。与之相对的则是数据的结构化传输方式,结构化的数据被称之为记录或者数据块,这些数据当中除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。综上所述:IO流就是数据以流的形式在计算机的世界里来回传输。


Java中的IO流

       一个独立的Java程序总是过于寂寞与空虚,成天想着与外界发生点什么,于是就出现了IO流,这样程序就可以通过IO与外界发生点什么有意义的事情了。而且在Java的类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等。


Java中IO流的分类

按流向分:

        输入流: 程序可以从中读取数据的流。

        输出流: 程序能向其中写入数据的流。

这里的输入流与输出流是以程序为参考点来说的,所谓的输入流就是程序从中获取数据的流,输出流就是程序要其写数据的流。在输入流的一边是程序,而另一边就是流的数据源。而输出流的一边则目标,一边就是程序。


按数据传输单位分:

        字节流: 以字节为单位传输数据的流

字符流: 以字符为单位传输数据的流

因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1、在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,再将查到的字符返回;2、字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。


按功能分:

        节点流: 用于直接操作目标设备的流

        处理流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。

节点流指的是可以从或向一个特定的地方(节点)读写数据;处理流则是对一个已存在的流的连接的封装,通过所封装的流的功能调用实现数据的读写。此外处理流的构造方法总是以一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。



最后的最后附一张我整理的Java中与IO相关的各个类的关系图,当然也有几个很少见的类就没有写上去,有兴趣的可以去查查API手册,之后我会对其中最常见的一些类做一些详细的介绍,好了,今天的分享就到这里,我们下次见。



原创粉丝点击