zoukankan      html  css  js  c++  java
  • 回忆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是相对于程序来讲的。
    内存和程序。
    外存和程序。

  • 相关阅读:
    iOS开发之静态库(二)—— .a
    iOS开发之静态库(一)—— 基本概念
    Linux中ctrl-c, ctrl-z, ctrl-d 区别
    JNI技术基础(1)——从零开始编写JNI代码
    开篇纪念
    java面试题
    jvm系列二之GC收集器
    jvm系列一
    ConcurrentHashMap源码剖析(1.8版本)
    博客系统对比
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053487.html
Copyright © 2011-2022 走看看