Module java.base
Package java.io

Class ByteArrayOutputStream

java.lang.Object
java.io.OutputStream
java.io.ByteArrayOutputStream
所有已实现的接口:
Closeable, Flushable, AutoCloseable

public class ByteArrayOutputStream extends OutputStream
该类实现了一个输出流,其中数据被写入到一个字节数组中。随着数据的写入,缓冲区会自动增长。可以使用toByteArray()toString()来检索数据。

关闭ByteArrayOutputStream没有任何效果。在流关闭后仍然可以调用该类中的方法,而不会生成IOException

自版本:
1.0
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected byte[]
    buf
    存储数据的缓冲区。
    protected int
    缓冲区中有效字节的数量。
  • Constructor Summary

    Constructors
    Constructor
    Description
    创建一个新的ByteArrayOutputStream
    创建一个新的ByteArrayOutputStream,具有指定大小(以字节为单位)的缓冲区容量。
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    close()
    关闭ByteArrayOutputStream没有任何效果。
    void
    reset()
    将此ByteArrayOutputStreamcount字段重置为零,以便丢弃输出流中当前累积的所有内容。
    int
    size()
    返回缓冲区的当前大小。
    byte[]
    创建一个新分配的字节数组。
    使用默认字符集解码缓冲区的内容为字符串。
    toString(int hibyte)
    已弃用。
    该方法未正确将字节转换为字符。
    toString(String charsetName)
    使用指定的charset解码缓冲区的内容为字符串。
    toString(Charset charset)
    使用指定的charset解码缓冲区的内容为字符串。
    void
    write(byte[] b, int off, int len)
    从指定的字节数组中从偏移量off开始写入len字节到此ByteArrayOutputStream
    void
    write(int b)
    将指定的字节写入此ByteArrayOutputStream
    void
    writeBytes(byte[] b)
    将指定字节数组的全部内容写入此ByteArrayOutputStream
    void
    将此ByteArrayOutputStream的全部内容写入到指定的输出流参数中,就好像通过调用输出流的write方法使用out.write(buf, 0, count)一样。

    Methods declared in class java.io.OutputStream

    flush, nullOutputStream, write

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • buf

      protected byte[] buf
      存储数据的缓冲区。
    • count

      protected int count
      缓冲区中有效字节的数量。
  • Constructor Details

    • ByteArrayOutputStream

      public ByteArrayOutputStream()
      创建一个新的ByteArrayOutputStream。缓冲区容量最初为32字节,如果需要会增加其大小。
    • ByteArrayOutputStream

      public ByteArrayOutputStream(int size)
      创建一个新的ByteArrayOutputStream,具有指定大小(以字节为单位)的缓冲区容量。
      参数:
      size - 初始大小。
      抛出:
      IllegalArgumentException - 如果大小为负。
  • Method Details

    • write

      public void write(int b)
      将指定的字节写入此ByteArrayOutputStream
      指定者:
      write 在类中 OutputStream
      参数:
      b - 要写入的字节。
    • write

      public void write(byte[] b, int off, int len)
      从指定的字节数组中从偏移量off开始写入len字节到此ByteArrayOutputStream
      覆盖:
      write 在类中 OutputStream
      参数:
      b - 数据。
      off - 数据中的起始偏移量。
      len - 要写入的字节数。
      抛出:
      NullPointerException - 如果bnull
      IndexOutOfBoundsException - 如果off为负,len为负,或len大于b.length - off
    • writeBytes

      public void writeBytes(byte[] b)
      将指定字节数组的全部内容写入此ByteArrayOutputStream
      API注释:
      该方法等效于write(b, 0, b.length)
      参数:
      b - 数据。
      抛出:
      NullPointerException - 如果bnull
      自版本:
      11
    • writeTo

      public void writeTo(OutputStream out) throws IOException
      将此ByteArrayOutputStream的全部内容写入到指定的输出流参数中,就好像通过调用输出流的write方法使用out.write(buf, 0, count)一样。
      参数:
      out - 要写入数据的输出流。
      抛出:
      NullPointerException - 如果outnull
      IOException - 如果发生I/O错误。
    • reset

      public void reset()
      将此ByteArrayOutputStreamcount字段重置为零,以便丢弃输出流中当前累积的所有内容。可以再次使用输出流,重用已分配的缓冲区空间。
      参见:
    • toByteArray

      public byte[] toByteArray()
      创建一个新分配的字节数组。其大小为此输出流的当前大小,并且缓冲区的有效内容已被复制到其中。
      返回:
      作为字节数组的当前内容。
      参见:
    • size

      public int size()
      返回缓冲区的当前大小。
      返回:
      count字段的值,即此输出流中有效字节的数量。
      参见:
    • toString

      public String toString()
      使用默认字符集解码缓冲区的内容为字符串。新String的长度取决于字符集,因此可能不等于缓冲区的大小。

      该方法始终使用默认字符集替换格式错误的输入和不可映射的字符序列。当需要对解码过程进行更多控制时,应使用CharsetDecoder类。

      覆盖:
      toString 在类中 Object
      返回:
      从缓冲区内容解码的字符串。
      自版本:
      1.1
      参见:
    • toString

      public String toString(String charsetName) throws UnsupportedEncodingException
      使用指定的charset解码缓冲区的内容为字符串。

      该方法等效于使用带有charset#toString(charset)

      形式为

          ByteArrayOutputStream b;
          b.toString("UTF-8")
      
      的调用与表达式完全相同
          ByteArrayOutputStream b;
          b.toString(StandardCharsets.UTF_8)
      
      参数:
      charsetName - 支持的charset的名称
      返回:
      从缓冲区内容解码的字符串。
      抛出:
      UnsupportedEncodingException - 如果不支持指定的字符集
      自版本:
      1.1
    • toString

      public String toString(Charset charset)
      使用指定的charset解码缓冲区的内容为字符串。

      该方法始终使用字符集的默认替换字符串替换格式错误的输入和不可映射的字符序列。当需要对解码过程进行更多控制时,应使用CharsetDecoder类。

      参数:
      charset - 用于解码bytescharset
      返回:
      从缓冲区内容解码的字符串。
      自版本:
      10
    • toString

      @Deprecated public String toString(int hibyte)
      Deprecated.
      This method does not properly convert bytes into characters. As of JDK 1.1, the preferred way to do this is via the toString(String charsetName) or toString(Charset charset) method, which takes an encoding-name or charset argument, or the toString() method, which uses the default charset.
      创建一个新分配的字符串。其大小为输出流的当前大小,并且缓冲区的有效内容已被复制到其中。结果字符串中的每个字符 c 都是从字节数组中的相应元素 b 构造而成,使得:
          c == (char)(((hibyte & 0xff) << 8) | (b & 0xff))
      
      参数:
      hibyte - 每个生成的 Unicode 字符的高字节。
      返回:
      输出流的当前内容,作为一个字符串。
      参见:
    • close

      public void close() throws IOException
      关闭 ByteArrayOutputStream 没有任何效果。在流关闭后仍可调用此类中的方法,而不会生成 IOException
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      覆盖:
      close 在类 OutputStream
      抛出:
      IOException - 如果发生 I/O 错误。