这个类实现了一个输出流,其中的数据被写入一个字节数组。当数据被写入时,缓冲区会自动生长。数据可以用toByteArray()1和toString()检索
This class implements an output stream in which the data is written into a byte array. The buffer automatically grows as data is written to it. The data can be retrieved using toByteArray() and toString().
Closing a ByteArrayOutputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.
继承关系
![](https://img-blog.csdnimg.cn/20200917190202351.png)
构造方法
Constructor | Description |
---|---|
ByteArrayOutputStream() | 创建一个新的字节数组输出流。 |
ByteArrayOutputStream(int size) | 创建一个新的字节数组输出流,具有指定大小的缓冲容量,以字节为单位的。 |
成员方法
Method Modifier and Type | Description |
---|---|
void close() | 关闭 ByteArrayOutputStream没有影响。 |
void reset() | 将这个字节数组输出流的 count场为零,因此,目前累计输出输出流被丢弃。 |
int size() | 返回缓冲区的当前大小。 |
byte[] toByteArray() | 创建一个新分配的字节数组。 |
String toString() | 使用该平台的默认字符集将缓冲区的内容转换为字符串解码字节。 |
String toString(int hibyte) | 过时的,这种方法不正确地将字节转换为字符。作为 JDK 1.1,这样的首选方式是通过toString(String enc)方法,它以一个编码名称的争论,或toString()方法,使用平台的默认字符编码。 |
String toString(String charsetName) | 将缓冲区的内容到一个字符串使用命名 charset解码字节。 |
void write(byte[] b, int off, int len) | 写 len字节指定字节数组中的起始偏移 off这个字节数组输出流。 |
void write(int b) | 将指定的字节写入该字节数组输出流中。 |
void writeTo(OutputStream out) | 写这个字节数组输出流的完整内容到指定的输出流的说法,如果通过调用输出流的写法 out.write(buf, 0, count) |
需要注意的是,toByteArray是新增的方法,因此在流操作的时候不能继续使用多态
测试示例代码如下:
package cn.yzy.io;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class testByteArrayOutputStream {
public static void main(String[] args) {
//临时访问字节流空间
byte[] dest = null;
//创建流
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
String msg = "go big or go home"; //from facebook
byte[] data = msg.getBytes();
baos.write(data, 0, data.length);
baos.flush();
//获取写入内存的数据到dest中
dest = baos.toByteArray();
/*
* 可以通过ByteArrayOutputStream的toString方法还原字符串
* 也可以通过ByteArrayOutputStream调用toByteArray之后得到的字节数组利用String构造字符串
*/
System.out.println("baos.toString():" + baos.toString());
System.out.println("ByteArrayOutputStream调用toByteArray-->String-->constructorL:" + new String(dest, 0, dest.length));
System.out.println("ByteArrayOutputStream调用toByteArray-->String-->constructorL:" + new String(dest, 0, baos.size()));
//ByteArrayOutputStream的size方法获取的是缓冲区中字节数组的大小,ByteArrayOutputStream调用toByteArray获得的字节数组大小没有变化
System.out.println("dest.length:" + dest.length);
System.out.println("dest.toString().length():" + dest.toString().length());
}catch (IOException e) {
e.getStackTrace();
}finally {
try {
if(null != baos)
baos.close();
}catch (IOException e) {
e.getStackTrace();
}
}
}
}
新增的方法 ↩︎