Package com.fasterxml.aalto.util
Class TextBuilder
java.lang.Object
com.fasterxml.aalto.util.TextBuilder
Class conceptually similar to
StringBuilder
, but
that allows for bit more efficient building, using segmented internal
buffers, and direct access to these buffers.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ReaderConfig
private char[]
private int
Number of characters in currently active (last) segmentprivate char[]
private int
private int
private boolean
Marker to know if the contents currently stored were created using "indentation detection".private char[]
private int
Indicator for length of data with_resultArray
, iff the primary indicator (_currentSize) is invalid (-1).private String
String that will be constructed when the whole contents are needed; will be temporarily stored in case asked for again.private ArrayList
<char[]> List of segments prior to currently active segment.private int
Amount of characters in segments in_segments
(package private) static final int
Size of the first text segment buffer to allocate.(package private) static final int
static final int
static final int
(package private) static final int
private static final String
private static final char[]
private static final String[]
private static final String
private static final char[]
private static final String[]
(package private) static final char[]
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate final char[]
allocBuffer
(int minNeeded) void
append
(char c) void
append
(char[] c, int start, int len) void
void
appendSurrogate
(int surr) private char[]
private int
calcNewSize
(int latestSize) char[]
int
contentsToArray
(int srcStart, char[] dst, int dstStart, int len) static TextBuilder
int
decodeElements
(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.boolean
equalsString
(String str) Note: it is assumed that this method is not used often enough to be a bottleneck, or for long segments.private void
expand
(int roomNeeded) Method called when current segment is full, to allocate new segment.char[]
void
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 usedvoid
void
char[]
int
char[]
boolean
int
Method that will stream contents of this buffer into specified Writer.void
recycle
(boolean force) Method called to indicate that the underlying buffers should now be recycled if they haven't yet been recycled.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).private final void
void
resetWithChar
(char c) Method called to initialize the buffer with just a single charchar[]
Method called to clear out any content text buffer may have, and initializes and returns the first segment to add characters to.void
resetWithIndentation
(int indCharCount, char indChar) void
resetWithSurrogate
(int c) void
setCurrentLength
(int len) int
size()
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)
-
Field Details
-
sNoChars
static final char[] sNoChars -
DEF_INITIAL_BUFFER_SIZE
static final int DEF_INITIAL_BUFFER_SIZESize 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
-
_segments
List of segments prior to currently active segment. -
_segmentSize
private int _segmentSizeAmount of characters in segments in_segments
-
_currentSegment
private char[] _currentSegment -
_currentSize
private int _currentSizeNumber of characters in currently active (last) segment -
_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 _resultLenIndicator 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 _isIndentationMarker 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
- See Also:
-
sIndSpacesArray
private static final char[] sIndSpacesArray -
sIndSpacesStrings
-
sIndTabs
- See Also:
-
sIndTabsArray
private static final char[] sIndTabsArray -
sIndTabsStrings
-
-
Constructor Details
-
TextBuilder
-
-
Method Details
-
createRecyclableBuffer
-
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
-
contentsAsArray
public char[] contentsAsArray() -
contentsToArray
public int contentsToArray(int srcStart, char[] dst, int dstStart, int len) -
rawContentsTo
Method that will stream contents of this buffer into specified Writer.- Throws:
IOException
-
isAllWhitespace
public boolean isAllWhitespace() -
equalsString
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
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
- Throws:
SAXException
-
fireSaxCommentEvent
- 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
-
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
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) -
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()
-