avatar

io简单总结

概述

本文用来简单分类java io,不做源码分析
整体按照类图来分类,实际上io应当按照基础和包装类分类,基本上java io中基础流实现功能,
包装流封装基础流完成进一步功能.

inStream

jdk中in的意思表示指定来源,read函数表示从来源中按字节读取

  • 直接子类
    • FileInputStream:文件读取
    • ByteArrayInputStream:从指定数组源中读取
    • PipedInputStream:和PipedOutputStream联合使用,实现原理通过共享一个数组,多线程间使用
    • SequenceInputStream:指定一组InputStream,当读取到当前流末尾则触发下一个
    • ObjectInputStream:序列化读取流
  • Filter子类:典型的包装类
    • BufferedInputStream:内部含有byte[],读取时,若数组未满,触发内部真正流的读取填充内部数组
      否则直接获取数组数据
    • DataInpuStream:DataInput子类,ReadBoolen等函数按对应字节读取,然后进行类型转换

outStream

  • flsuh函数
    • out流中的定义是调用时保证将存在缓存的情况真正刷新到目的地,如FileOutputStream这种
      实现本身的write函数就不存在缓存,flush函数实际是空白的.
    • BufferedOutputStream的刷新时机在于write时内部buff已满,或主动调用flush
  • PrintStream:System.out,内部封装了Writer,因此其print函数是调用Writer中的

reader

  • reader 实际上是对于字节的转换InputStreamReader包含了解码器StreamDecoder
  • BufferedReader,PipedReader都是包装类设计

writer

总结

文章作者: fancylight
文章链接: https://www.fancylight.top/2020/03/16/io%E7%AE%80%E5%8D%95%E6%80%BB%E7%BB%93/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论