Package com.fasterxml.aalto.util
Class TextBuilder
- java.lang.Object
-
- com.fasterxml.aalto.util.TextBuilder
-
public final class TextBuilder extends java.lang.ObjectClass conceptually similar toStringBuilder, but that allows for bit more efficient building, using segmented internal buffers, and direct access to these buffers.
-
-
Field Summary
Fields Modifier and Type Field Description private ReaderConfig_configprivate char[]_currentSegmentprivate int_currentSizeNumber of characters in currently active (last) segmentprivate char[]_decodeBufferprivate int_decodeEndprivate int_decodePtrprivate boolean_isIndentationMarker to know if the contents currently stored were created using "indentation detection".private char[]_resultArrayprivate int_resultLenIndicator for length of data with_resultArray, iff the primary indicator (_currentSize) is invalid (-1).private java.lang.String_resultStringString that will be constructed when the whole contents are needed; will be temporarily stored in case asked for again.private java.util.ArrayList<char[]>_segmentsList of segments prior to currently active segment.private int_segmentSizeAmount of characters in segments in_segments(package private) static intDEF_INITIAL_BUFFER_SIZESize of the first text segment buffer to allocate.(package private) static intINT_SPACEstatic intMAX_INDENT_SPACESstatic intMAX_INDENT_TABS(package private) static intMAX_SEGMENT_LENGTHprivate static java.lang.StringsIndSpacesprivate static char[]sIndSpacesArrayprivate static java.lang.String[]sIndSpacesStringsprivate static java.lang.StringsIndTabsprivate static char[]sIndTabsArrayprivate static java.lang.String[]sIndTabsStrings(package private) static char[]sNoChars
-
Constructor Summary
Constructors Modifier Constructor Description privateTextBuilder(ReaderConfig cfg)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private char[]allocBuffer(int minNeeded)voidappend(char c)voidappend(char[] c, int start, int len)voidappend(java.lang.String str)voidappendSurrogate(int surr)private char[]buildResultArray()private intcalcNewSize(int latestSize)char[]contentsAsArray()java.lang.StringcontentsAsString()intcontentsToArray(int srcStart, char[] dst, int dstStart, int len)static TextBuildercreateRecyclableBuffer(ReaderConfig cfg)intdecodeElements(org.codehaus.stax2.typed.TypedArrayDecoder tad, boolean reset)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.booleanequalsString(java.lang.String str)Note: it is assumed that this method is not used often enough to be a bottleneck, or for long segments.private voidexpand(int roomNeeded)Method called when current segment is full, to allocate new segment.char[]finishCurrentSegment()voidfireSaxCharacterEvents(org.xml.sax.ContentHandler h)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 usedvoidfireSaxCommentEvent(org.xml.sax.ext.LexicalHandler h)voidfireSaxSpaceEvents(org.xml.sax.ContentHandler h)char[]getBufferWithoutReset()intgetCurrentLength()char[]getTextBuffer()booleanisAllWhitespace()intrawContentsTo(java.io.Writer w)Method that will stream contents of this buffer into specified Writer.voidrecycle(boolean force)Method called to indicate that the underlying buffers should now be recycled if they haven't yet been recycled.voidresetForBinaryDecode(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).private voidresetForDecode()voidresetWithChar(char c)Method called to initialize the buffer with just a single charchar[]resetWithEmpty()Method called to clear out any content text buffer may have, and initializes and returns the first segment to add characters to.voidresetWithIndentation(int indCharCount, char indChar)voidresetWithSurrogate(int c)voidsetCurrentLength(int len)intsize()java.lang.StringtoString()Note: calling this method may not be as efficient as callingcontentsAsString(), since it is guaranteed that resulting String is NOT cached (to ensure we see no stale data)
-
-
-
Field Detail
-
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:
- Constant Field Values
-
MAX_SEGMENT_LENGTH
static final int MAX_SEGMENT_LENGTH
- See Also:
- Constant Field Values
-
INT_SPACE
static final int INT_SPACE
- See Also:
- Constant Field Values
-
_config
private final ReaderConfig _config
-
_segments
private java.util.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 java.lang.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:
- Constant Field Values
-
MAX_INDENT_TABS
public static final int MAX_INDENT_TABS
- See Also:
- Constant Field Values
-
sIndSpaces
private static final java.lang.String sIndSpaces
- See Also:
- Constant Field Values
-
sIndSpacesArray
private static final char[] sIndSpacesArray
-
sIndSpacesStrings
private static final java.lang.String[] sIndSpacesStrings
-
sIndTabs
private static final java.lang.String sIndTabs
- See Also:
- Constant Field Values
-
sIndTabsArray
private static final char[] sIndTabsArray
-
sIndTabsStrings
private static final java.lang.String[] sIndTabsStrings
-
-
Constructor Detail
-
TextBuilder
private TextBuilder(ReaderConfig cfg)
-
-
Method Detail
-
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 java.lang.String contentsAsString()
-
contentsAsArray
public char[] contentsAsArray()
-
contentsToArray
public int contentsToArray(int srcStart, char[] dst, int dstStart, int len)
-
rawContentsTo
public int rawContentsTo(java.io.Writer w) throws java.io.IOExceptionMethod that will stream contents of this buffer into specified Writer.- Throws:
java.io.IOException
-
isAllWhitespace
public boolean isAllWhitespace()
-
equalsString
public boolean equalsString(java.lang.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(org.xml.sax.ContentHandler h) throws org.xml.sax.SAXExceptionThis 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:
org.xml.sax.SAXException
-
fireSaxSpaceEvents
public void fireSaxSpaceEvents(org.xml.sax.ContentHandler h) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
fireSaxCommentEvent
public void fireSaxCommentEvent(org.xml.sax.ext.LexicalHandler h) throws org.xml.sax.SAXException- Throws:
org.xml.sax.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(java.lang.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.TypedXMLStreamExceptionMethod 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 java.lang.String toString()
Note: calling this method may not be as efficient as callingcontentsAsString(), since it is guaranteed that resulting String is NOT cached (to ensure we see no stale data)- Overrides:
toStringin classjava.lang.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()
-
-