com.fasterxml.jackson.core.util

## Class BufferRecycler

- java.lang.Object
- - com.fasterxml.jackson.core.util.BufferRecycler

All Implemented Interfaces:
  RecyclerPool.WithPool<BufferRecycler>

    public class BufferRecycler
    extends Object
    implements RecyclerPool.WithPool<BufferRecycler>

This is a small utility class, whose main functionality is to allow simple reuse of raw byte/char buffers. It is usually allocated through `RecyclerPool` (starting with 2.16): multiple pool implementations exists. The default pool implementation uses `ThreadLocal` combined with `SoftReference`. The end result is a low-overhead GC-cleanable recycling: hopefully ideal for use by stream readers.

Rewritten in 2.10 to be thread-safe (see [jackson-core#479] for details), to not rely on `ThreadLocal` access.
Rewritten in 2.16 to work with `RecyclerPool` abstraction.

### Field Summary

Fields
`protected AtomicReferenceArray<byte[]>` `_byteBuffers`
`protected AtomicReferenceArray<char[]>` `_charBuffers`
`static int` `BYTE_BASE64_CODEC_BUFFER` Buffer used for concatenating binary data that is either being encoded as base64 output, or decoded from base64 input.
`static int` `BYTE_READ_IO_BUFFER` Buffer used for reading byte-based input.
`static int` `BYTE_WRITE_CONCAT_BUFFER` Buffer used for temporarily concatenating output; used for example when requesting output as byte array.
`static int` `BYTE_WRITE_ENCODING_BUFFER` Buffer used for temporarily storing encoded content; used for example by UTF-8 encoding writer
`static int` `CHAR_CONCAT_BUFFER` Buffer used by generators; for byte-backed generators for buffering of `String` values to output (before encoding into UTF-8), and for char-backed generators as actual concatenation buffer.
`static int` `CHAR_NAME_COPY_BUFFER` For parsers, temporary buffer into which `char[]` for names is copied when requested as such; for `WriterBasedGenerator` used for buffering during `writeString(Reader)` operation (not commonly used).
`static int` `CHAR_TEXT_BUFFER` Used through `TextBuffer`: directly by parsers (to concatenate String values) and indirectly via `SegmentedStringWriter` when serializing (databind level `ObjectMapper` and `ObjectWriter`).
`static int` `CHAR_TOKEN_BUFFER` Buffer used as input buffer for tokenization for character-based parsers.

### Constructor Summary

Constructors
`` `BufferRecycler()` Default constructor used for creating instances of this default implementation.
`protected` `BufferRecycler(int bbCount, int cbCount)` Alternate constructor to be used by sub-classes, to allow customization of number of low-level buffers in use.

### Method Summary

All Methods Instance Methods Concrete Methods
`byte[]` `allocByteBuffer(int ix)`
`byte[]` `allocByteBuffer(int ix, int minSize)`
`char[]` `allocCharBuffer(int ix)`
`char[]` `allocCharBuffer(int ix, int minSize)`
`protected byte[]` `balloc(int size)`
`protected int` `byteBufferLength(int ix)`
`protected char[]` `calloc(int size)`
`protected int` `charBufferLength(int ix)`
`void` `releaseByteBuffer(int ix, byte[] buffer)`
`void` `releaseCharBuffer(int ix, char[] buffer)`
`void` `releaseToPool()` Method called when owner of this recycler no longer wishes use it; this should return it to pool passed via `withPool()` (if any).
`BufferRecycler` `withPool(RecyclerPool<BufferRecycler> pool)` Method called by owner of this recycler instance, to provide reference to `RecyclerPool` into which instance is to be released (if any)

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

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

### Field Detail

#### BYTE_READ_IO_BUFFER

    public static final int BYTE_READ_IO_BUFFER

Buffer used for reading byte-based input.

See Also:
  Constant Field Values

#### BYTE_WRITE_ENCODING_BUFFER

    public static final int BYTE_WRITE_ENCODING_BUFFER

Buffer used for temporarily storing encoded content; used for example by UTF-8 encoding writer

See Also:
  Constant Field Values

#### BYTE_WRITE_CONCAT_BUFFER

    public static final int BYTE_WRITE_CONCAT_BUFFER

Buffer used for temporarily concatenating output; used for example when requesting output as byte array.

See Also:
  Constant Field Values

#### BYTE_BASE64_CODEC_BUFFER

    public static final int BYTE_BASE64_CODEC_BUFFER

Buffer used for concatenating binary data that is either being encoded as base64 output, or decoded from base64 input.

Since:
  2.1
See Also:
  Constant Field Values

#### CHAR_TOKEN_BUFFER

    public static final int CHAR_TOKEN_BUFFER

Buffer used as input buffer for tokenization for character-based parsers.

See Also:
  Constant Field Values

#### CHAR_CONCAT_BUFFER

    public static final int CHAR_CONCAT_BUFFER

Buffer used by generators; for byte-backed generators for buffering of `String` values to output (before encoding into UTF-8), and for char-backed generators as actual concatenation buffer.

See Also:
  Constant Field Values

#### CHAR_TEXT_BUFFER

    public static final int CHAR_TEXT_BUFFER

Used through `TextBuffer`: directly by parsers (to concatenate String values) and indirectly via `SegmentedStringWriter` when serializing (databind level `ObjectMapper` and `ObjectWriter`). In both cases used as segments (and not for whole value), but may result in retention of larger chunks for big content (long text values during parsing; bigger output documents for generation).

See Also:
  Constant Field Values

#### CHAR_NAME_COPY_BUFFER

    public static final int CHAR_NAME_COPY_BUFFER

For parsers, temporary buffer into which `char[]` for names is copied when requested as such; for `WriterBasedGenerator` used for buffering during `writeString(Reader)` operation (not commonly used).

See Also:
  Constant Field Values

#### _byteBuffers

    protected final AtomicReferenceArray<byte[]> _byteBuffers

#### _charBuffers

    protected final AtomicReferenceArray<char[]> _charBuffers

### Constructor Detail

#### BufferRecycler

    public BufferRecycler()

Default constructor used for creating instances of this default implementation.

#### BufferRecycler

    protected BufferRecycler(int bbCount,
                             int cbCount)

Alternate constructor to be used by sub-classes, to allow customization of number of low-level buffers in use.

Parameters:
  `bbCount` - Number of `byte[]` buffers to allocate
  `cbCount` - Number of `char[]` buffers to allocate
Since:
  2.4

### Method Detail

#### allocByteBuffer

    public final byte[] allocByteBuffer(int ix)

Parameters:
  `ix` - One of `READ_IO_BUFFER` constants.
Returns:
  Buffer allocated (possibly recycled)

#### allocByteBuffer

    public byte[] allocByteBuffer(int ix,
                                  int minSize)

#### releaseByteBuffer

    public void releaseByteBuffer(int ix,
                                  byte[] buffer)

#### allocCharBuffer

    public final char[] allocCharBuffer(int ix)

#### allocCharBuffer

    public char[] allocCharBuffer(int ix,
                                  int minSize)

#### releaseCharBuffer

    public void releaseCharBuffer(int ix,
                                  char[] buffer)

#### byteBufferLength

    protected int byteBufferLength(int ix)

#### charBufferLength

    protected int charBufferLength(int ix)

#### balloc

    protected byte[] balloc(int size)

#### calloc

    protected char[] calloc(int size)

#### withPool

    public BufferRecycler withPool(RecyclerPool<BufferRecycler> pool)

Method called by owner of this recycler instance, to provide reference to `RecyclerPool` into which instance is to be released (if any)

Specified by:
  `withPool` in interface `RecyclerPool.WithPool<BufferRecycler>`
Parameters:
  `pool` - Pool that "owns" pooled item
Returns:
  This item (for call chaining)
Since:
  2.16

#### releaseToPool

    public void releaseToPool()

Method called when owner of this recycler no longer wishes use it; this should return it to pool passed via `withPool()` (if any).

Specified by:
  `releaseToPool` in interface `RecyclerPool.WithPool<BufferRecycler>`
Since:
  2.16