zoukankan      html  css  js  c++  java
  • IO流

    本文原创,转载请标明原处!

    流分输入流输出流,其基本操作分别是读取和写入。

    流分字节流和字符流,其操作数据分别是字节和字符。

    字节流的基类:InputStreamOutputStream

    字符流的基类:ReaderWriter

    流分源头流和非源头流(嵌套流),其区别在于该流是否可以独立使用,源头流是可以独立使用的流,而非源头流是需要有源头流才能使用。下图表示出了有那些源头流。

    如何认识这些流,个人觉得分六个方面认识:源头所需性能优化操作强化数据过滤多源控制状态记录

    源头所需而存在的流有:

    • ByteArray + InputStream/OutputStream
    • CharArray + Reader/Writer
    • String + Reader/Writer
    • File + Reader/Writer
    • Piped + InputStream/OutputStream/Reader/Writer

    性能优化的流主要是缓存,拥有缓存的流有:

    • Buffered + InputStream/OutputStream/Reader/Writer
    • LineNumberReader
    • PrintWriter(注:该类可以直接使用流或文件名构造,构造的时候,会创建BufferedWriter,因此会带有缓存功能。如果使用Writer构造,就不会带有缓存功能了,因此职责单一有利于记忆和阅读,否则会造成阅读混乱,建议使用Writer参数的构造。)

    操作强化是指在基本操作的基础上,增加了可以直接读取或写入实际数据的类型,拥有操作强化的流有:

    • Buffered + Reader/Writer
    • Print + Stream/Writer
    • Data + InputStream/OutputStream
    • Object + InputStream/OutputStream

    数据过滤是指数据从一端流向另一端的过程中进行转换,统计,添加,删减,装饰等操作,数据过滤的流有:

    • InputStreamReader:把字节转化为字符的流。
    • OuputStreamWriter:把字符转化为字节的流。
    • File + Reader/Writer:字节与字符间的转换。
    • LineNumberReader:累计换行符的次数,即可以获取或改变当前操作的行号。

    多源控制是指流不止一个数据源,一般多源是输入流才有这样的需求,拥有多源的流有:

    • SequenceInputStream:从第一个源开始读取,当读取完毕时,再向第二个源读取,以此顺序读取。
    • Pushback + InputStream/Reader:流一般是单向,不可逆。此流虽然可逆,但只是流向他自身的一个逆缓存。读取操作时,需要先把逆缓存的数据读取完毕,才能正式读取源。

    流的基类里都带有状态记录所需的方法,分别是:markSupported,mark和reset。但并不是所有流都支持状态记录,markSupported返回布尔值就是告诉操作者,该流是否支持状态记录。

    一般拥有缓存的流都支持状态记录,而部份非源头流是否支持是依赖于其源的支持。缓存流会把开始记录的数据一直存放在缓存里面,直到缓存数据的长度超出一个数值,这个数值是在调用方法mark时,传入的一个int数值,超出之后就无法回档。调用reset方法,就是把状态回档,使流从记录地方开使操作。

    Filter + InputStream/OutputStream/Reader/Writer,这个流是提供给用户自定义流的模板,实现了其状态记录的支持是依赖于源。

    相关:

    网络输入输出,通过socket对象可以获取其输入流getInputStream()与输出流getOutputStream()。

    控制台输入输出,通过System.in,System.out,System.err获取。虽然这三个对象的变量被声明为final,但可以通过System.setIn(...),System.setOut(...),System.setErr(...)方法改变。

    扫描器类Scanner,这个类是继承于遍历器类Iterator<String>,并不是流,但可以使用流来创建,提供更为强大的读取能力。例如可以读取大整数BigInteger,大浮点数BigDecimal,字符串模式匹配等。

    待续更新!

  • 相关阅读:
    前端3 浮动布局,固定定位,绝对定位,相对定位
    前端2 字体|文本属性样式, 高级选择器
    前端1.概念
    前端,基础选择器,嵌套关系.display属性,盒模型
    数据库之索引
    数据库之进阶(视图,事务,存储过程)
    数据库,多表数据
    数据库之表的使用
    数据的演化(数据仓库的发展史)
    HDFS退出安全模式
  • 原文地址:https://www.cnblogs.com/hvicen/p/6127283.html
Copyright © 2011-2022 走看看