当前位置: 代码迷 >> 综合 >> Java IO (4) -- ByteArrayOutputStream 类
  详细解决方案

Java IO (4) -- ByteArrayOutputStream 类

热度:59   发布时间:2023-12-16 13:27:27.0

文章目录

    • 1. 概念
    • 2. 字段
    • 3. 方法
      • 1. 构造器
      • 2. 其他方法
    • 4. 案例

1. 概念

ByteArrayOutputStream 是字节数组输出流,在内存中创建了一个字节数组,所有发送到输出流的数据都会保存到该字节数组的缓冲区中

2. 字段

  1. protected byte buf[]:用于保存发送到输出流数据的字节数组
  2. protected int count:buf中有效字节数

3. 方法

1. 构造器

  1. public ByteArrayOutputStream():创建了一个大小默认为 32 的字节数组输出流
  2. public ByteArrayOutputStream(int size):创建一个 size 大小字节数组输出流

2. 其他方法

  1. public synchronized void write(int b):将单个字节b写入到字节输出流的"字节数组"中
  2. public void write(byte b[]) throws IOException:来自超类OutputStream,将整个字节数组b写入到字节输出流的"字节数组"中
  3. public synchronized void write(byte b[], int off, int len):将字节数组b,off索引开始,len个字节写入到字节输出流的"字节数组"中.
  4. public synchronized void writeTo(OutputStream out) throws IOException:将字节数输出流中的数据写入指定的OutputStream输出流中
  5. public synchronized void reset():将字节输出流中的字节数组count置为0,也就是将现有字节流的数据全部丢弃
  6. public synchronized byte[] toByteArray():创建一个新的字节数组,内容是字节输出流中的数据
  7. public synchronized int size():返回字节输出流中字节数组大小
  8. public synchronized String toString():使用平台默认的字符集,将输出流中字节数组转换成字符串
  9. public synchronized String toString(String charsetName):使用指定的charsetName字符集,将输出流中的字节数组转换字符串.
  10. 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
  相关解决方案