Module  java.base
软件包  java.io

Class ByteArrayOutputStream

  • All Implemented Interfaces:
    CloseableFlushableAutoCloseable


    public class ByteArrayOutputStream
    extends OutputStream
    该类实现了将数据写入字节数组的输出流。 当数据写入缓冲区时,缓冲区会自动增长。 可以使用toByteArray()toString()检索数据。

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

    从以下版本开始:
    1.0
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      protected byte[] buf
      存储数据的缓冲区。
      protected int count
      缓冲区中有效字节的数量。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      ByteArrayOutputStream​()
      创建一个新的字节数组输出流。
      ByteArrayOutputStream​(int size)
      创建一个新的字节数组输出流,具有指定大小的缓冲区容量(以字节为单位)。
    • 方法摘要

      所有方法  接口方法  具体的方法  弃用的方法 
      Modifier and Type 方法 描述
      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)调用输出流的写入方法 out.write(buf, 0, count)
    • 字段详细信息

      • buf

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

        protected int count
        缓冲区中有效字节的数量。
    • 构造方法详细信息

      • ByteArrayOutputStream

        public ByteArrayOutputStream​()
        创建一个新的字节数组输出流。 缓冲区容量最初为32字节,但如果需要,其容量会增加。
      • ByteArrayOutputStream

        public ByteArrayOutputStream​(int size)
        创建一个新的字节数组输出流,具有指定大小的缓冲区容量(以字节为单位)。
        参数
        size - 初始尺寸。
        异常
        IllegalArgumentException - 如果大小为负。
    • 方法详细信息

      • write

        public void write​(int b)
        将指定的字节写入此字节数组输出流。
        Specified by:
        writeOutputStream
        参数
        b - 要写入的字节。
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
        从指定的字节数组写入 len字节,从偏移 off开始, off到这个字节数组输出流。
        重写:
        writeOutputStream
        参数
        b - 数据。
        off - 数据中的起始偏移量。
        len - 要写入的字节数。
      • writeTo

        public void writeTo​(OutputStream out)
                     throws IOException
        将此字节数组输出流的完整内容写入指定的输出流参数,就像使用 out.write(buf, 0, count)调用输出流的写入方法 out.write(buf, 0, count)
        参数
        out - 要写入数据的输出流。
        异常
        IOException - 如果发生I / O错误。
      • reset

        public void reset​()
        将此字节数组输出流的count字段重置为零,以便丢弃输出流中当前累积的所有输出。 可以再次使用输出流,重用已经分配的缓冲区空间。
        另请参见:
        ByteArrayInputStream.count
      • toByteArray

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

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

        public String toString​()
        使用平台的默认字符集将缓冲区内容转换为字符串解码字节。 新的String的长度是字符集的函数,因此可能不等于缓冲区的大小。

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

        重写:
        toStringObject
        结果
        从缓冲区的内容中解码字符串。
        从以下版本开始:
        1.1
      • toString

        public String toString​(String charsetName)
                        throws UnsupportedEncodingException
        通过使用命名的charset解码字节将缓冲区的内容转换为字符串。 新的String的长度是字符集的函数,因此可能不等于字节数组的长度。

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

        参数
        charsetName - 支持的名称charset
        结果
        从缓冲区的内容中解码字符串。
        异常
        UnsupportedEncodingException - 如果不支持命名的字符集
        从以下版本开始:
        1.1
      • toString

        @Deprecated
        public String toString​(int hibyte)
        已过时。 此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方法是通过toString(String enc)方法,它采用encoding-name参数,或toString()方法,该方法使用平台的默认字符编码。
        创建一个新分配的字符串。 其大小是输出流的当前大小,并且缓冲区的有效内容已被复制到其中。 结果字符串中的每个字符c由字节数组中的相应元素b构成 ,使得:
        
             c == (char)(((hibyte & 0xff) << 8) | (b & 0xff))
         
        参数
        hibyte - 每个生成的Unicode字符的高字节。
        结果
        输出流的当前内容,作为一个字符串。
        另请参见:
        size()toString(String)toString()