天天看點

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