Class NonCopyingByteArrayOutputStream

java.lang.Object
java.io.OutputStream
java.io.ByteArrayOutputStream
org.apache.avro.util.NonCopyingByteArrayOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable

public class NonCopyingByteArrayOutputStream extends ByteArrayOutputStream
Utility to make data written to an ByteArrayOutputStream directly available as a ByteBuffer.Supports limits to the amount of data which may be written. All decompressors MUST create capacity restricted streams to prevent maliciously compressed data to trigger memory problems across threads.
  • Constructor Details

    • NonCopyingByteArrayOutputStream

      public NonCopyingByteArrayOutputStream(int size)
      Creates a new byte array output stream, with no size limit.
      Parameters:
      size - the initial size
      Throws:
      IllegalArgumentException - if size is negative
  • Method Details

    • asByteBuffer

      public ByteBuffer asByteBuffer()
      Get the contents of this ByteArrayOutputStream wrapped as a ByteBuffer. This is a shallow copy. Changes to this ByteArrayOutputstream "write through" to the ByteBuffer.
      Returns:
      The contents of this ByteArrayOutputstream wrapped as a ByteBuffer
    • write

      public void write(int b)
      Overrides:
      write in class ByteArrayOutputStream
    • write

      public void write(byte[] b, int off, int len)
      Overrides:
      write in class ByteArrayOutputStream
    • writeBytes

      public void writeBytes(byte[] b)
      Overrides:
      writeBytes in class ByteArrayOutputStream
    • capacityLimitedOutputStream

      public static NonCopyingByteArrayOutputStream capacityLimitedOutputStream(int size)
      Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes. The amount of data which can be written to any output stream is limited by the system property SystemLimitException.MAX_DECOMPRESS_LENGTH_PROPERTY
      Parameters:
      size - buffer capacity
      Returns:
      the output stream
    • capacityLimitedOutputStream

      public static NonCopyingByteArrayOutputStream capacityLimitedOutputStream(int size, long limit)
      Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes, capacity limit as specified in limit.
      Parameters:
      size - buffer capacity
      limit - max size of output buffer
      Returns:
      the output stream