上一篇文章Java8 I/O源码-ByteArrayInputStream详细介绍了ByteArrayInputStream。本文将详细介绍ByteArrayInputStream对应的输出流ByteArrayOutputStream的实现。
ByteArrayOutputStream属于字节型输出流,该输出流中的数据被写入到一个byte数组里。byte数组会随着被写入其中的数据的增长而增长。定义如下:
public class ByteArrayOutputStream extends OutputStream
outline
字段
字段 | 说明 |
---|---|
protected byte buf[]; | 存储数据的缓冲区。 |
protected int count; | 缓冲区中的有效字节数 |
构造方法
字段 | 说明 |
---|---|
public ByteArrayOutputStream() {…} | 创建新的ByteArrayOutputStream,缓冲区容量初始化为32。 |
public ByteArrayOutputStream(int size) {…} | 创建新的ByteArrayOutputStream,缓冲区容量初始化为size。 |
方法
字段 | 说明 |
---|---|
private void ensureCapacity(int minCapacity) {…} | 确认缓冲区可以存放minCapacity个元素,如有必要,则进行扩容。 |
private void grow(int minCapacity) {…} | 增加缓冲区容量,使其至少可以存放minCapacity个元素。 |
private static int hugeCapacity(int minCapacity) {…} | 计算允许分配给byte数组的最大容量 |
public synchronized void write(int b) {…} | 将指定的字节写入输出流。 |
public synchronized void write(byte b[], int off, int len) {…} | 将指定byte数组中从偏移量off开始的len个字节写入输出流。 |
public synchronized void writeTo(OutputStream out) throws IOException {…} | 将此byte数组输出流的全部内容写入到指定的输出流参数out中 |
public synchronized void reset() {…} | 将输出流的count字段重置为零,从而丢弃输出流中目前已累积的所有输出。 |
public synchronized byte toByteArray()[] {…} | 以byte数组的形式返回此输出流的当前内容。 |
public synchronized int size() {…} | 返回count字段的值,这即输出流中有效字节的数目。 |
public synchronized String toString() {…} | 使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串并返回。 |
public synchronized String toString(String charsetName) throws UnsupportedEncodingException {…} | 使用指定的charsetName,通过解码字节将缓冲区内容转换为字符串并返回。 |
public void close() throws IOException {…} | 关闭输出流,此方法无效,无法关闭输出流。 |
构造方法
ByteArrayOutputStream()
/**
* 创建新的ByteArrayOutputStream,缓冲区容量初始化为32,如有必要可扩容。
*/
public ByteArrayOutputStream() {
this(32);
}
ByteArrayOutputStream( int size)
/**
* 创建新的ByteArrayOutputStream,缓冲区容量初始化为参数size的大小,以字节为单位。
*
* @param size 初始化容量.
* @exception IllegalArgumentException 如果size为负数
*/
public ByteArrayOutputStream(int size) {
if (size < 0) {
throw new IllegalArgumentException("Negative initial size: "
+ size);
}
buf = new byte[size];
}
方法
ensureCapacity( int minCapacity)
/**
* 确认缓冲区可