• Java I/O随笔


    Java的I/O流的概念模型:

    Java I/O流共涉及40多个类,由4个抽象基类(InputStream/OutputStream  Writer/Reader)派生出:

          InputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。

          OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。

          对于InputStream/Reader而言,他们把输入设备抽象成一个“水管”,这个“水管”里的每一个“水滴”就是一个输入流,依次排列。如下图所示:

                              

         字节流和字符流的处理方式其实非常相似,只是他们处理的输入/输出单位不同而已。输入流使用隐式的记录指针来表示当前正准备从哪个“水滴”开始读取,每当程序从InputStream或Reader里读取一个或者多个“水滴”后,记录指针自动向后移动;除此之外,InputStream和Reader里都提供一些方法来控制记录指针的移动(如:reset()将此流的记录指针重新定位到上一次记录标记(mark())的位置;skip()记录指针向前移动n个字节、字符等)。

          对于OutputStream/Writer而言,他们同样把输入输出设备抽象成“水管”,只是这个水管里面没有任何水滴,如下图所示:

                               

          正如图所示,当执行输出时,程序相当于一次把”水滴“放入到水管中,输出流同样采用隐式指针来标识当前水滴即将放入的位置,每当程序向OutputStream/Writer里输出一个或者多个水滴之后,记录将自动向后移动。

    值得注意的是Java的I/O流是处理流而不是节点流,Java I/O采用处理流而不是节点流的原因:

        1)、主要以增加缓冲的方式来提高输入输出效率,从而提升性能

        2)、处理流可能提供一系列便捷的方法来一次输入/输出大批量的内容,而不是输入/输出一个或者多个”水滴“

  • 相关阅读:
    Common Words
    The end of other
    避免ssh断开导致运行命令的终止:screen
    Check iO:初学Python
    linux环境c++开发:ubuntu12.04使用llvm3.4.2
    boost库使用:仿SGI-STL实现的一个树节点allocator
    boost库使用:vs2013下boost::container::vector编译出错解决
    读论文系列:Nearest Keyword Search in XML Documents中使用的数据结构(CT、ECT)
    房产律师咨询
    E文阅读
  • 原文地址:https://www.cnblogs.com/tian2fei/p/3600107.html
Copyright © 2020-2023  润新知