Java IO作为Java语言的重要模块,很多程序员都想认真掌握好这个模块,奈何Java库设计者在面对三种类型IO(文件、控制台、网络连接)以及不同方式的通信(顺序、随机访问、二进制、字符、按行、字节等等)这些问题的时候,也没能给出完美的解决方案,他们只能通过创建大量的类来解决这个难题。只因为Java IO采用了如此多的类,以致于刚开始产生不知道从哪里入手的感觉,因此我觉得应该写一些关于IO方面从简入繁的博文,方便自己谨记这些知识点,同时希望也能帮助一些想学习IO的人。

    首先,我们得清楚什么是Java 指的 流?

    流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

   其次,我们要知道Java对流的分类,因为通信方式以及类型不同,Java针对情况给予了不同的类来让我们能够便捷的解决流问题,与其说针对流分类,不如说是针对Java设计者设计的类库进行分类。

 分类如下:

在这里很多人可能会疑惑IO流字节流与字符流之间的区别,下面我们来详细讲一下:

  因为计算机底层只会读取字节数据,但是在实际应用中,我们经常会遇到读写字符串这种情况,如果没有字符流,那我们需要写代码将字符转化为字节,然后将字节写入到流中,显示字符串时,需要从流中取字节然后转换为字符,是不是很麻烦?Java设计者知道你感觉麻烦,所以设计了字符流,就是将字节流进行包装,让你能传递字符串当参数。