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.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static interface 
    Tag-on interface to allow various other types to expose BufferRecycler they are constructed with.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Buffer used for concatenating binary data that is either being encoded as base64 output, or decoded from base64 input.
    static final int
    Buffer used for reading byte-based input.
    static final int
    Buffer used for temporarily concatenating output; used for example when requesting output as byte array.
    static final int
    Buffer used for temporarily storing encoded content; used for example by UTF-8 encoding writer
    static final int
    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
    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
    Used through TextBuffer: directly by parsers (to concatenate String values) and indirectly via SegmentedStringWriter when serializing (databind level ObjectMapper and ObjectWriter).
    static final int
    Buffer used as input buffer for tokenization for character-based parsers.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default constructor used for creating instances of this default implementation.
  • Method Summary

    Modifier and Type
    Method
    Description
    final byte[]
     
    byte[]
    allocByteBuffer(int ix, int minSize)
     
    final char[]
     
    char[]
    allocCharBuffer(int ix, int minSize)
     
    boolean
     
    void
    releaseByteBuffer(int ix, byte[] buffer)
     
    void
    releaseCharBuffer(int ix, char[] buffer)
     
    void
    Method called when owner of this recycler no longer wishes use it; this should return it to pool passed via withPool() (if any).
    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

    equals, 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:
    • 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:
    • 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:
    • 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:
    • CHAR_TOKEN_BUFFER

      public static final int CHAR_TOKEN_BUFFER
      Buffer used as input buffer for tokenization for character-based parsers.
      See Also:
    • 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:
    • 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:
    • 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:
  • Constructor Details

    • BufferRecycler

      public BufferRecycler()
      Default constructor used for creating instances of this default implementation.
  • Method Details

    • isLinkedWithPool

      public boolean isLinkedWithPool()
      Returns:
      True if this recycler is linked to pool and may be released with releaseToPool(); false if no linkage exists.
      Since:
      2.17
    • 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)
    • 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