前面学习ByteArrayInputStream,了解了“输入流”。接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream。
本章,我们会先对ByteArrayOutputStream进行介绍,在了解了它的源码之后,再通过示例来掌握如何使用它。
转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_03.html
ByteArrayOutputStream 介绍
ByteArrayOutputStream 是字节数组输出流。它继承于OutputStream。
ByteArrayOutputStream 中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
OutputStream 函数列表
我们来看看ByteArrayOutputStream的父类OutputStream的函数接口。
// 构造函数
OutputStream()
void close()
void flush()
void write(byte[] buffer, int offset, int count)
void write(byte[] buffer)
abstract void write(int oneByte)
ByteArrayOutputStream 函数列表
// 构造函数
ByteArrayOutputStream()
ByteArrayOutputStream(int size)
void close()
synchronized void reset()
int size()
synchronized byte[] toByteArray()
String toString(int hibyte)
String toString(String charsetName)
String toString()
synchronized void write(byte[] buffer, int offset, int len)
synchronized void write(int oneByte)
synchronized void writeTo(OutputStream out)
OutputStream和ByteArrayOutputStream源码分析
OutputStream是ByteArrayOutputStream的父类,我们先看看OutputStream的源码,然后再学ByteArrayOutputStream的源码。
1. OutputStream.java源码分析(基于jdk1.7.40)
1 package java.io;
2
3 public abstract class OutputStream implements Closeable, Flushable {
4 // 将字节b写入到“输出流”中。
5 // 它在子类中实现!
6 public abstract void write(int b) throws IOException;
7
8 // 写入字节数组b到“字节数组输出流”中。
9 public void write(byte b[]) throws IOException {
10 write(b, 0, b.length);
11 }
12
13 // 写入字节数组b到“字节数组输出流”中,并且off是“数组b的起始位置”,len是写入的长度
14 public void write(byte b[], int off, int len) throws IOException {
15 if (b == null) {
16 throw new NullPointerException();
17 } else if ((off < 0) || (off > b.length) || (len < 0) ||
18 ((off + len) > b.length) || ((off + len) < 0)) {
19 throw new IndexOutOfBoundsException();
20 } else if (len == 0) {
21 return;
22 }
23 for (int i = 0 ; i < len ; i++) {
24 write(b[off + i]);
25 }
26 }
27
28 public void flush() throws IOException {
29 }
30
31 public void close() throws IOException {
32 }
33 }