【Java笔记】——将晦涩难懂的IO流形象化

    何为流?物质在库与库之间的转移运行称为流,也就是说它是一个抽象的概念,既看不到也摸不着,更感受不到。那么应该如何理解这么一个抽象概念呢?就是把它形象化。


    暂且举一个小例子,蚂蚁搬家的故事,从一个洞把食物搬到另外一个洞,很多蚂蚁会一起工作,有来有回连续不断,这样在两个洞中间就可以形成搬运食物的“流”。

                          【Java笔记】——将晦涩难懂的IO流形象化_第1张图片

    Java语言的输入和输出功能是十分强大的,对于数据的输入输出操作就是以“流”的方式进行的。这里的数据也就可以认为是蚂蚁的“食物”,而数据从哪里输出,又输出到哪里,就可以认为是蚂蚁的两个洞。J2SDK提供了很多的“流”类,用来获取不同种类的数据,这些类都定义在java.io包中。


流类的分类

    1、按流的方向不同分:输入流和输出流


    2、按处理数据的单位不同分:字节流(8位)和字符流(16位)


    3、按照功能不同分:节点流和处理流


四种基本流

    J2SDK提供的所有流类都分别继承四种抽象流类型:

             【Java笔记】——将晦涩难懂的IO流形象化_第2张图片

    1、InputStream和Reader


    继承于InputStream的流都是用于向程序中输入数据,且数据的单位为字节。

            【Java笔记】——将晦涩难懂的IO流形象化_第3张图片

            【Java笔记】——将晦涩难懂的IO流形象化_第4张图片


    2、OutputStream和Writer


    继承于OutputStream的流都是用于从程序中输出数据,且数据的单位为字节。

              【Java笔记】——将晦涩难懂的IO流形象化_第5张图片

              【Java笔记】——将晦涩难懂的IO流形象化_第6张图片

节点流和处理流

    1、节点流为可以从一个特定的数据源读写数据。可以理解为给一个桶插上一根管子,就可以从管子另一头取水。

                                【Java笔记】——将晦涩难懂的IO流形象化_第7张图片


    2、处理流是连接在已存在的流之上,通过对数据的处理为程序提供更为强大的读写功能。也就是说在这个管子上再套一层管子,从而可以取不同形态的水,比如带冰的。

                                【Java笔记】——将晦涩难懂的IO流形象化_第8张图片

疑惑点

    在这里很容混淆一个概念,就是说输入和输出是相对谁而言的?为什么InputStream时后面跟的Reader,而OutputStream时后面跟的是Writer?


    其实输入和输出都是相对于程序而言的,比如输入流,它是向程序中输入数据,为什么用Reader,那是因为要把流里面的数据读入程序中;而输出流正好相反,它是从程序中输出数据,用Writer是因为要把数据写入流中。


总结

    面向对象中有很多抽象的概念,对于这种没有实物对比的概念,必须要把它形象化才能更容易理解和掌握。这时就要把知识融入生活,找跟生活类似的东西去比对,从而跟生活常识构成知识网,这也很好的体现了代码如人生的道理。

你可能感兴趣的:(【Java笔记】——将晦涩难懂的IO流形象化)