文章目录
-
- 1. 概念
- 2. 字段
- 3. 方法
-
- 1. 构造器
- 2. 其他方法
- 4. 案例
1. 概念
ByteArrayOutputStream 是字节数组输出流,在内存中创建了一个字节数组,所有发送到输出流的数据都会保存到该字节数组的缓冲区中
2. 字段
- protected byte buf[]:用于保存发送到输出流数据的字节数组
- protected int count:buf中有效字节数
3. 方法
1. 构造器
- public ByteArrayOutputStream():创建了一个大小默认为 32 的字节数组输出流
- public ByteArrayOutputStream(int size):创建一个 size 大小字节数组输出流
2. 其他方法
- public synchronized void write(int b):将单个字节b写入到字节输出流的"字节数组"中
- public void write(byte b[]) throws IOException:来自超类OutputStream,将整个字节数组b写入到字节输出流的"字节数组"中
- public synchronized void write(byte b[], int off, int len):将字节数组b,off索引开始,len个字节写入到字节输出流的"字节数组"中.
- public synchronized void writeTo(OutputStream out) throws IOException:将字节数输出流中的数据写入指定的OutputStream输出流中
- public synchronized void reset():将字节输出流中的字节数组count置为0,也就是将现有字节流的数据全部丢弃
- public synchronized byte[] toByteArray():创建一个新的字节数组,内容是字节输出流中的数据
- public synchronized int size():返回字节输出流中字节数组大小
- public synchronized String toString():使用平台默认的字符集,将输出流中字节数组转换成字符串
- public synchronized String toString(String charsetName):使用指定的charsetName字符集,将输出流中的字节数组转换字符串.
- public void close() throws IOException:关闭流无效,流已经关闭情况下,调用类中其他方法不会抛出异常
4. 案例
class ByteArrayOutputStreamDemo {
public static void main(String[] args) throws IOException {
byte[] bytes = "defghijk".getBytes();ByteArrayOutputStream byteStream = new ByteArrayOutputStream();// 写入单个字节byteStream.write(97);byteStream.write(98);byteStream.write(99);System.out.println("-------" + byteStream);// 写入bytes字节数组,索引0开始,长度5.byteStream.write(bytes, 0, 5); //abc 拼接上 defghSystem.out.println("-------" + byteStream);// 计算流中字节数组大小int size = byteStream.size();System.out.println("-------size=" + size);// 将流中的字节数组数据放到一个新字节数组newBytes中byte[] newBytes = byteStream.toByteArray();System.out.println("-------" + new String(newBytes));// 重置,字节输出流中的字节数组count置为0,即清空数据byteStream.reset();System.out.println("after reset-------" + byteStream.size());// 将编码为GBK的字节数组写到字节输出流中.byte[] encodeBytes = "defghijk".getBytes("UTF-8");//指定GBK,英文字母不会乱码byteStream.write(encodeBytes);// toString()默认平台编码(我的UTF8),可正常解码.System.out.println("-------" + byteStream.toString());// 指定了编码集GBK,解码不正常System.out.println("-------" + byteStream.toString("UTF-16"));// 将输出流里面的数据写到另外一个字节数组输出流.ByteArrayOutputStream out = new ByteArrayOutputStream();byteStream.writeTo(out);System.out.println(out.toString());}
}
//结果
-------abc
-------abcdefgh
-------size=8
-------abcdefgh
after reset-------0
-------defghijk
-------摥晧桩橫
defghijk