Java 输入输出相关概念介绍(File、IO 流)(五)

167 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

上篇文章:Java 输入输出相关概念介绍(File、IO 流)(四)讲解了InputStream 的基本使用及一些常用的api 接口。本篇文章将会介绍OutputStream 的使用。

OutputStream 的基本概念

OutputStream 和InputStream 相同,以字节为单位,是输出流的父类。

OutputStream 提供了write()函数从输出流中读取字节数据,读取之后,相关数据放到目标位置中,可以是本地文件,也可以是网络Socket。

OutputStream 的实现是一个典型的装饰者模式,使用的时候直接new 子类就好。

OutputStream 的常用实现类

几个常用的子实现类

  • FileOutputStream

是文件输出流,通常用于向文件进行写入操作。

  • BufferedOutputStream

这个是缓冲输出流,它的作用是为另一个输出流添加缓冲功能。

  • ByteArrayOutputStream

是字节数组输出流。

写入ByteArrayOutputStream 输出流中的数据会被写入到一个byte 数组,这个byte 数组作为缓冲区,会随着数据的不断写入而自动增长,不用用户操心。

写入完成之后,可使用toByteArray() 或者toString() 获取数据。

几个不常用的子实现类

  • PipedOutputStream

是管道输出流,使用时,和PipedInputStream一起,可以实现多线程间的管道通信。

  • FilterOutputStream

这个是过滤输出流,是DataOutputStream,BufferedOutputStream 和PrintStream 的超类。过滤输出流可以应用到输入流或者输出流中,在读/写数据的同时,也可以修改数据(比如加密或者压缩),或者只是提供额外的方法,将读/写的数据转换为其他格式。下面的DataOutputStream 类就提供了一个可以转换数据的方法,它能够将int 转换为4字节,然后把这些字节写到底层的输入流。

  • DataOutputStream

这个是数据输出流,使用它来装饰其他的输出流,这样就允许应用程序使用与机器无关的方式,向底层写入基本Java 数据类型。

  • PrintStream

这个是打印输出流,使用它来装饰其他输出流,为其他输出流增加打印各种数据值的功能。

  • ObjectOutputStream

是对象输出流,它和ObjectInputStream 一起对某个对象进行持久存储。注意,这个要操作的对象必须序列化才能进行持久化

附上一张各个类的关系图

Screen Shot 2022-04-02 at 10.41.57 PM.png

总结

后续文章,我们会围绕着OutputStream 的概念及其子类的相关概念和使用方法做讲解。讲解的内容为了方便读者理解,会首先介绍实现类的相关方法,然后举一个具体的例子做讲述。