Class TextBuilder

java.lang.Object
com.fasterxml.aalto.util.TextBuilder

public final class TextBuilder extends Object
Class conceptually similar to StringBuilder, but that allows for bit more efficient building, using segmented internal buffers, and direct access to these buffers.
  • Field Details

    • sNoChars

      static final char[] sNoChars
    • DEF_INITIAL_BUFFER_SIZE

      static final int DEF_INITIAL_BUFFER_SIZE
      Size of the first text segment buffer to allocate. Need not contain the biggest segment, since new ones will get allocated as needed. However, it's sensible to use something that often is big enough to contain typical segments.
      See Also:
    • MAX_SEGMENT_LENGTH

      static final int MAX_SEGMENT_LENGTH
      See Also:
    • INT_SPACE

      static final int INT_SPACE
      See Also:
    • _config

      private final ReaderConfig _config
    • _segments

      private ArrayList<char[]> _segments
      List of segments prior to currently active segment.
    • _segmentSize

      private int _segmentSize
      Amount of characters in segments in _segments
    • _currentSegment

      private char[] _currentSegment
    • _currentSize

      private int _currentSize
      Number of characters in currently active (last) segment
    • _resultString

      private String _resultString
      String that will be constructed when the whole contents are needed; will be temporarily stored in case asked for again.
    • _resultArray

      private char[] _resultArray
    • _resultLen

      private int _resultLen
      Indicator for length of data with _resultArray, iff the primary indicator (_currentSize) is invalid (-1).
    • _decodeBuffer

      private char[] _decodeBuffer
    • _decodePtr

      private int _decodePtr
    • _decodeEnd

      private int _decodeEnd
    • _isIndentation

      private boolean _isIndentation
      Marker to know if the contents currently stored were created using "indentation detection". If so, it's known to be all white space
    • MAX_INDENT_SPACES

      public static final int MAX_INDENT_SPACES
      See Also:
    • MAX_INDENT_TABS

      public static final int MAX_INDENT_TABS
      See Also:
    • sIndSpaces

      private static final String sIndSpaces
      See Also:
    • sIndSpacesArray

      private static final char[] sIndSpacesArray
    • sIndSpacesStrings

      private static final String[] sIndSpacesStrings
    • sIndTabs

      private static final String sIndTabs
      See Also:
    • sIndTabsArray

      private static final char[] sIndTabsArray
    • sIndTabsStrings

      private static final String[] sIndTabsStrings
  • Constructor Details

  • Method Details

    • createRecyclableBuffer

      public static TextBuilder createRecyclableBuffer(ReaderConfig cfg)
    • recycle

      public void recycle(boolean force)
      Method called to indicate that the underlying buffers should now be recycled if they haven't yet been recycled. Although caller can still use this text buffer, it is not advisable to call this method if that is likely, since next time a buffer is needed, buffers need to reallocated. Note: calling this method automatically also clears contents of the buffer.
    • resetWithEmpty

      public char[] resetWithEmpty()
      Method called to clear out any content text buffer may have, and initializes and returns the first segment to add characters to.
    • resetWithIndentation

      public void resetWithIndentation(int indCharCount, char indChar)
    • resetWithChar

      public void resetWithChar(char c)
      Method called to initialize the buffer with just a single char
    • resetWithSurrogate

      public void resetWithSurrogate(int c)
    • getBufferWithoutReset

      public char[] getBufferWithoutReset()
    • size

      public int size()
      Returns:
      Number of characters currently stored by this collector
    • getTextBuffer

      public char[] getTextBuffer()
    • contentsAsString

      public String contentsAsString()
    • contentsAsArray

      public char[] contentsAsArray()
    • contentsToArray

      public int contentsToArray(int srcStart, char[] dst, int dstStart, int len)
    • rawContentsTo

      public int rawContentsTo(Writer w) throws IOException
      Method that will stream contents of this buffer into specified Writer.
      Throws:
      IOException
    • isAllWhitespace

      public boolean isAllWhitespace()
    • equalsString

      public boolean equalsString(String str)
      Note: it is assumed that this method is not used often enough to be a bottleneck, or for long segments. Based on this, it is optimized for common simple cases where there is only one single character segment to use; fallback for other cases is to create such segment.
    • fireSaxCharacterEvents

      public void fireSaxCharacterEvents(ContentHandler h) throws SAXException
      This is a specialized "accessor" method, which is basically to fire SAX characters() events in an optimal way, based on which internal buffers are being used
      Throws:
      SAXException
    • fireSaxSpaceEvents

      public void fireSaxSpaceEvents(ContentHandler h) throws SAXException
      Throws:
      SAXException
    • fireSaxCommentEvent

      public void fireSaxCommentEvent(LexicalHandler h) throws SAXException
      Throws:
      SAXException
    • append

      public void append(char c)
    • appendSurrogate

      public void appendSurrogate(int surr)
    • append

      public void append(char[] c, int start, int len)
    • append

      public void append(String str)
    • getCurrentLength

      public int getCurrentLength()
    • setCurrentLength

      public void setCurrentLength(int len)
    • finishCurrentSegment

      public char[] finishCurrentSegment()
    • calcNewSize

      private int calcNewSize(int latestSize)
    • decodeElements

      public int decodeElements(org.codehaus.stax2.typed.TypedArrayDecoder tad, boolean reset) throws org.codehaus.stax2.typed.TypedXMLStreamException
      Method called by the stream reader to decode space-separated tokens that are part of the current text event (contents of which are stored within this buffer), using given decoder.
      Throws:
      org.codehaus.stax2.typed.TypedXMLStreamException
    • resetForBinaryDecode

      public void resetForBinaryDecode(org.codehaus.stax2.typed.Base64Variant v, org.codehaus.stax2.ri.typed.CharArrayBase64Decoder dec, boolean firstChunk)
      Method called to initialize given base64 decoder with data contained in this text buffer (for the current event).
    • resetForDecode

      private final void resetForDecode()
    • toString

      public String toString()
      Note: calling this method may not be as efficient as calling contentsAsString(), since it is guaranteed that resulting String is NOT cached (to ensure we see no stale data)
      Overrides:
      toString in class Object
    • allocBuffer

      private final char[] allocBuffer(int minNeeded)
    • expand

      private void expand(int roomNeeded)
      Method called when current segment is full, to allocate new segment.
    • buildResultArray

      private char[] buildResultArray()