前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java I/O 总结

Java I/O 总结

作者头像
yuxiaofei93
发布2018-09-11 16:33:01
5490
发布2018-09-11 16:33:01
举报
文章被收录于专栏:于晓飞的专栏于晓飞的专栏

Java I/O的的架构使用了装饰器的模式,我们在使用流的时候需要新建很多的装饰器对象,对源数据进行层层包装。各个包装类名以及它们的应用场景比较多,初学的时候难以摸清规律,这里我把它们归一下类,方便大家记忆。

InputStream & OutputStream


InputStreamOuputStream是 Java 中 I/O 操作中最基本的类。

InputStream

先上类图:

InputStream.jpg

类图中的类大致可以分为三个部分。

  1. 接口, 它包括了所有InputStream的基本操作。
  2. 源, 直接与各种形式的数据源直接打交道的类。对于某种特定形式的数据源,需要一种指定的InputStream来读取数据。图中几种常用的InputSream数据源类型的接口包括: ByteArrayInputStream, StringBufferInputStream, FileInputStream, PipedInputStream, SequenceInputStream。他们的构造参数各不相同,对应的数据源也各不相同。
  3. 格式, 如果直接使用‘源’类型的InputStream是可以直接读取数据的, 但是读取出来的数据的类型都是byte并且没有缓存, 大部分情况下需要我们转换成其它基本类型的数据。Java 为了方便我们读取其它类型的数据提供了几种类型的装饰器。常用的几种装饰器有 DataInputStream, BufferedInputStream。其中DataInputStream允许我们读取其它基本类型数据, BufferedInputStream使用了缓存,可以提高读取的效率。

OuputStream

类图:

OutputStream.jpg

与InputStream类似, 它也可以分为三部分:

  1. 接口, 定义OutputStream的所有操作
  2. 目标, 这同数据源类似, 它决定了数据最终被写到哪里。它们都继承自FilterOutputStream。常用的几种形式有:ByteArrayOutputStream, FileOutputStream, PipedOutputStream。它们分别将数据写入到内存区域,文件,管道中。
  3. 形式, 默认的输出全部都是以Byte的形式写入到目标中的。如果想要写入其它一些基本类型的数据或者使用缓存提高效率,可以使用其它的装饰器包裹目标的OutputStream。常用的OutputStream装饰器有DataOutputStream, PrintStream, BufferedOuputStream, 他们的功能分别是写入基本类型, 写入换行符并清空缓存,提供了写入的目标的缓存。

Reader & Writer


InputStream & OutputStream 的重要缺陷在于不能支持Unicode。所以,Java 1.1版本中,Java I/O库中添加了这两个重要的类专门用来处理字符读写。

Reader

类图:

Reader.jpg

InputStream的架构类似,某些继承的顺序可能略有不同。

  1. 接口 ,与InputStream的操作是类似的, 只是Reader是针对字符的。
  2. 源, 与InputStream相比多了一个InputStreamReader, 它可以从一个InputStream构造一个Reader
  3. 格式, 与InputStream的读入格式类似,多了可以读入字符床的操作。

Writer

类图:

Writer.jpg

  1. 接口,与OuputStream类似,针对字符,多了append操作
  2. 目标,多了OutputStreamWriter,允许我们通过OutputStream构造Writer
  3. 格式,与Reader的格式对应,操作字符数据。

RandomAccessFile


RandomAccessFile是一个独立的类与I/O,R/W 无关。它相当于把InputStreamOutputStream结合起来使用。并添加了一些位置相关的新操作。

类图:

RandomAccessFile.jpg

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.06.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • InputStream & OutputStream
    • InputStream
      • OuputStream
      • Reader & Writer
        • Reader
          • Writer
          • RandomAccessFile
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档