java为什么字节输入流用fileinputstream的read,做的是输出

输出流fileoutputstream的write又是写入。这波是两级反转?这么命名我不理解

这个问题问的很有意思,一般好学的初学者都有这种困惑。

为啥【java为什么字节输入流用FileInputStream的read,做的是输出】?

初学者一般认为:【字节从A文件流向B文件,那么就认为数据是从A处流出去,再从B处流进来】 所以产生了这种困惑。

这个其实是选取参考系不同造成的。

举个例子,假设你要从上海前往北京。 有两种方案可以选择:

  • 坐私家车,预计14-16个小时
  • 坐高铁,预计4-5个小时

一般人都会选择后者。这个时候,自然就引入了第三者:高铁

所以人的流向从: [上海--->北京] 变成了 [上海--->高铁--->北京]

同理可得:在计算机中,数据的流向其实从 [文件A--->文件B] 变成了 [文件A--->内存--->文件B]

假设,我们以高铁作为参考系。那么人就是从上海流入,再流出到北京。

同理可得:在计算机中,如果以内存作为参考系,数据的流向其实从文件A流入,再流出到文件B。

至于为啥选择内存作为参考系?

我个人认为有3个原因:

  • 程序员比起关系数据的来源,更关心数据的处理。

  • 数据一般都是在内存中进行处理的,所以一般以内存作为参考系。

  • 以内存作为参考系,那么从始至终,参考系不变。

就好比,程序员就像是高铁的领导,你自然是从高铁站的角度来看,认为人应该是从上海流入的,然后从北京流出的。

因此是先用FileInputStream的输入流,进行输入,然后再用输出流进行输出。

输入输出的主体是内存,从硬盘读取数据到内存,就是输入,将数据从内存写出到硬盘,就是输出。

通俗的理解就是,out是你从代码里写出到文本里,in是从文本读进代码里