Package org.apache.avro.util

# 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.

## Field Summary

### Fields inherited from class java.io.ByteArrayOutputStream

`buf, count`

## Constructor Summary

Constructors
Constructor
Description
`NonCopyingByteArrayOutputStream(int size)`
Creates a new byte array output stream, with no size limit.

## Method Summary

Modifier and Type
Method
Description
`ByteBuffer`
`asByteBuffer()`
Get the contents of this ByteArrayOutputStream wrapped as a ByteBuffer.
`static NonCopyingByteArrayOutputStream`
`capacityLimitedOutputStream(int size)`
Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.
`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`.
`void`
`write(byte[] b, int off, int len)`
`void`
`write(int b)`
`void`
`writeBytes(byte[] b)`

### Methods inherited from class java.io.ByteArrayOutputStream

`close, reset, size, toByteArray, toString, toString, toString, toString, writeTo`

### Methods inherited from class java.io.OutputStream

`flush, nullOutputStream, write`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## 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