Class ConcurrentCharInputReader
java.lang.Object
com.univocity.parsers.common.input.AbstractCharInputReader
com.univocity.parsers.common.input.concurrent.ConcurrentCharInputReader
- All Implemented Interfaces:
CharInput
,CharInputReader
A concurrent CharInputReader that loads batches of characters in a separate thread and assigns them to buffer in
AbstractCharInputReader
when requested.
This class loads "buckets" of characters in the background and provides them sequentially to the AbstractCharInputReader.buffer
attribute in AbstractCharInputReader
.
The bucket loading process will block and wait while all buckets are full.
Similarly, the reader will block while all buckets are empty.
This CharInputReader implementation provides a better throughput than DefaultCharInputReader
when reading large inputs (> 100 mb
).
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ConcurrentCharLoader
private final int
private final int
private boolean
Fields inherited from class com.univocity.parsers.common.input.AbstractCharInputReader
buffer, closeOnStop, i, length
-
Constructor Summary
ConstructorsConstructorDescriptionConcurrentCharInputReader
(char[] lineSeparator, char normalizedLineSeparator, int bucketSize, int bucketQuantity, int whitespaceRangeStart, boolean closeOnStop) Creates a new instance with the mandatory characters for handling newlines transparently.ConcurrentCharInputReader
(char normalizedLineSeparator, int bucketSize, int bucketQuantity, int whitespaceRangeStart, boolean closeOnStop) Creates a new instance with the mandatory characters for handling newlines transparently. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
Assigns the next "bucket" of characters to theAbstractCharInputReader.buffer
attribute, and updates theAbstractCharInputReader.length
to the number of characters read.protected void
Starts an input reading thread to load characters from the given reader into "buckets" of charactersvoid
stop()
Stops the CharInputReader from reading characters from theReader
provided inAbstractCharInputReader.start(Reader)
and closes it.Methods inherited from class com.univocity.parsers.common.input.AbstractCharInputReader
addInputAnalysisProcess, charCount, currentParsedContent, currentParsedContentLength, enableNormalizeLineEndings, getChar, getLineSeparator, getQuotedString, getString, lastIndexOf, lineCount, markRecordStart, nextChar, readComment, skipLines, skipQuotedString, skipString, skipWhitespace, start, unwrapInputStream
-
Field Details
-
bucketLoader
-
bucketSize
private final int bucketSize -
bucketQuantity
private final int bucketQuantity -
unwrapping
private boolean unwrapping
-
-
Constructor Details
-
ConcurrentCharInputReader
public ConcurrentCharInputReader(char normalizedLineSeparator, int bucketSize, int bucketQuantity, int whitespaceRangeStart, boolean closeOnStop) Creates a new instance with the mandatory characters for handling newlines transparently. Line separators will be detected automatically.- Parameters:
normalizedLineSeparator
- the normalized newline character (as defined inFormat.getNormalizedNewline()
) that is used to replace any lineSeparator sequence found in the input.bucketSize
- the size of an each individual "bucket" used to store characters read from the input.bucketQuantity
- the number of "buckets" to load in memory. Note the reader will stop if all buckets are full.whitespaceRangeStart
- starting range of characters considered to be whitespace.closeOnStop
- indicates whether to automatically close the input whenstop()
is called
-
ConcurrentCharInputReader
public ConcurrentCharInputReader(char[] lineSeparator, char normalizedLineSeparator, int bucketSize, int bucketQuantity, int whitespaceRangeStart, boolean closeOnStop) Creates a new instance with the mandatory characters for handling newlines transparently.- Parameters:
lineSeparator
- the sequence of characters that represent a newline, as defined inFormat.getLineSeparator()
normalizedLineSeparator
- the normalized newline character (as defined inFormat.getNormalizedNewline()
) that is used to replace any lineSeparator sequence found in the input.bucketSize
- the size of an each individual "bucket" used to store characters read from the input.bucketQuantity
- the number of "buckets" to load in memory. Note the reader will stop if all buckets are full.whitespaceRangeStart
- starting range of characters considered to be whitespace.closeOnStop
- indicates whether to automatically close the input whenstop()
is called
-
-
Method Details
-
stop
public void stop()Stops the CharInputReader from reading characters from theReader
provided inAbstractCharInputReader.start(Reader)
and closes it. Also stops the input reading thread. -
setReader
Starts an input reading thread to load characters from the given reader into "buckets" of characters- Specified by:
setReader
in classAbstractCharInputReader
- Parameters:
reader
- theReader
provided inAbstractCharInputReader.start(Reader)
-
reloadBuffer
protected void reloadBuffer()Assigns the next "bucket" of characters to theAbstractCharInputReader.buffer
attribute, and updates theAbstractCharInputReader.length
to the number of characters read.- Specified by:
reloadBuffer
in classAbstractCharInputReader
-