天天看点

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

前面学习ByteArrayInputStream,了解了“输入流”。接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream。

本章,我们会先对ByteArrayOutputStream进行介绍,在了解了它的源码之后,再通过示例来掌握如何使用它。

ByteArrayOutputStream 是字节数组输出流。它继承于OutputStream。

ByteArrayOutputStream 中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。

OutputStream 函数列表

我们来看看ByteArrayOutputStream的父类OutputStream的函数接口。

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

ByteArrayOutputStream 函数列表

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

OutputStream是ByteArrayOutputStream的父类,我们先看看OutputStream的源码,然后再学ByteArrayOutputStream的源码。

1. OutputStream.java源码分析(基于jdk1.7.40)

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

2. ByteArrayOutputStream 源码分析(基于jdk1.7.40)

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

说明:

ByteArrayOutputStream实际上是将字节数据写入到“字节数组”中去。

(01) 通过ByteArrayOutputStream()创建的“字节数组输出流”对应的字节数组大小是32。

(02) 通过ByteArrayOutputStream(int size) 创建“字节数组输出流”,它对应的字节数组大小是size。

(03) write(int oneByte)的作用将int类型的oneByte换成byte类型,然后写入到输出流中。

(04) write(byte[] buffer, int offset, int len) 是将字节数组buffer写入到输出流中,offset是从buffer中读取数据的起始偏移位置,len是读取的长度。

(05) writeTo(OutputStream out) 将该“字节数组输出流”的数据全部写入到“输出流out”中。

关于ByteArrayOutputStream中API的详细用法,参考示例代码(ByteArrayOutputStreamTest.java):

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

运行结果:

baos=ABC

baos=ABCdefgh

size=8

str=ABCdefgh

baos2=ABCdefgh