潜龙丨勿用 2021-10-31 20:56 采纳率: 71.4%
浏览 29
已结题

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

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

  • 写回答

3条回答 默认 最新

  • 其樂无穷 2021-11-01 14:36
    关注

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

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

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

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

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

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

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

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

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

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

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

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

    我个人认为有3个原因:

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

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 创建了问题 10月31日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!