• 回忆java输入输出流,走出误区


    input read 将一个XXX读入(input)---从输入流中读取数据的下一个字节(code操作的)。
    output write 将一个类型的数据写入此流(code操作的)---然后把XXX输出(output)到目的地
    read(byte[] buf)
    write(byte[] buf)
    read和write中都有这种带参的情况,但是作用完全不同;
    read中的buf是装参数的容器:将input中的字节放入到buf中;
    write中的buf是传递参数的容器:我们要给output的数据已经提前被我们放到了output中。




    最开始学习流 fileInput...  fileOutput
    我认为流是相对于外存和内存来讲的;
    当我们把外存中的物理文件读到内存中就是fileInput
    当我们把内存中的文件写到外存中就是fileOutput




    但是不到一个小时 我就否认我的这个不算正确的想法;
    我觉得这个范围太大了还是很模糊;
    应该是相对于程序来讲的;
    如图示:



    在大多数时候,input和output都于FileInputStream/Reader、FileOutputStream/Writer开始,构造中只需要一个路径,可以看出在大多数时候,在input中输入时自动的,在output中输出是自动的;而通过底层的FilInput、FileOutput进行包装后的BufferedInput、BufferedOutput、DataInput、DataOutput等等,我们可以看出:底层的流是容器,高层的流是对底层的流进行包装(装饰者模式),进行功能扩展。


    某些特例使用output进行加密,压缩操作的时候,使用write入之后,通过ByteArrayOutputStream做为底层的容器,使用toByteArray方法获取到output中的值!




    最后总结:
    read读出
    write写入
    (不管是输入还是输出流,本质都是容器用于存放数据)
    正确的理解了这个过程,也就理解了input和output是相对于程序来讲的。
    内存和程序。
    外存和程序。

  • 相关阅读:
    算法导论第十三章:红黑树
    算法导论:相关数学问题小结
    STL_源码剖析之三:迭代器与traits
    算法导论第十二章:二叉查找树
    Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈(摘一段)
    STL源码剖析之六:算法
    STL 源码剖析之四:序列式容器
    算法导论第十四章:数据结构的扩张
    链表的归并排序:来自STL_ list_ sort 算法
    STL源码剖析之五:关联式容器
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053487.html
Copyright © 2020-2023  润新知