一起养成写作习惯!这是我参与「掘金日新计划 · 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 一起对某个对象进行持久存储。注意,这个要操作的对象必须序列化才能进行持久化
附上一张各个类的关系图
总结
后续文章,我们会围绕着OutputStream 的概念及其子类的相关概念和使用方法做讲解。讲解的内容为了方便读者理解,会首先介绍实现类的相关方法,然后举一个具体的例子做讲述。