Package 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
Modifier and Type
Field
Description
`protected final AtomicReferenceArray<byte[]>`
`_byteBuffers`
`protected final AtomicReferenceArray<char[]>`
`_charBuffers`
`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.
`static final int`
`BYTE_READ_IO_BUFFER`
Buffer used for reading byte-based input.
`static final int`
`BYTE_WRITE_CONCAT_BUFFER`
Buffer used for temporarily concatenating output; used for example when requesting output as byte array.
`static final int`
`BYTE_WRITE_ENCODING_BUFFER`
Buffer used for temporarily storing encoded content; used for example by UTF-8 encoding writer
`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.
`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).
`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`).
`static final int`
`CHAR_TOKEN_BUFFER`
Buffer used as input buffer for tokenization for character-based parsers.

## Constructor Summary

Constructors
Modifier
Constructor
Description
``
`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

Modifier and Type
Method
Description
`final byte[]`
`allocByteBuffer(int ix)`
`byte[]`
`allocByteBuffer(int ix, int minSize)`
`final 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 Details

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

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

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