com.univocity.parsers.common.input.concurrent
Class ConcurrentCharInputReader

java.lang.Object
  extended by com.univocity.parsers.common.input.AbstractCharInputReader
      extended by com.univocity.parsers.common.input.concurrent.ConcurrentCharInputReader
All Implemented Interfaces:
CharInput, CharInputReader

public class ConcurrentCharInputReader
extends AbstractCharInputReader

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).

Author:
uniVocity Software Pty Ltd - parsers@univocity.com
See Also:
CharInputReader, ConcurrentCharLoader, CharBucket

Field Summary
 
Fields inherited from class com.univocity.parsers.common.input.AbstractCharInputReader
buffer, i, length
 
Constructor Summary
ConcurrentCharInputReader(char[] lineSeparator, char normalizedLineSeparator, int bucketSize, int bucketQuantity, int whitespaceRangeStart)
          Creates a new instance with the mandatory characters for handling newlines transparently.
ConcurrentCharInputReader(char normalizedLineSeparator, int bucketSize, int bucketQuantity, int whitespaceRangeStart)
          Creates a new instance with the mandatory characters for handling newlines transparently.
 
Method Summary
protected  void reloadBuffer()
          Assigns the next "bucket" of characters to the AbstractCharInputReader.buffer attribute, and updates the AbstractCharInputReader.length to the number of characters read.
protected  void setReader(Reader reader)
          Starts an input reading thread to load characters from the given reader into "buckets" of characters
 void stop()
          Stops the CharInputReader from reading characters from the Reader provided in AbstractCharInputReader.start(Reader) and closes it.
 
Methods inherited from class com.univocity.parsers.common.input.AbstractCharInputReader
addInputAnalysisProcess, charCount, currentParsedContent, enableNormalizeLineEndings, getChar, getLineSeparator, getString, lineCount, markRecordStart, nextChar, readComment, skipLines, skipWhitespace, start, unwrapInputStream
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConcurrentCharInputReader

public ConcurrentCharInputReader(char normalizedLineSeparator,
                                 int bucketSize,
                                 int bucketQuantity,
                                 int whitespaceRangeStart)
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 in Format.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.

ConcurrentCharInputReader

public ConcurrentCharInputReader(char[] lineSeparator,
                                 char normalizedLineSeparator,
                                 int bucketSize,
                                 int bucketQuantity,
                                 int whitespaceRangeStart)
Creates a new instance with the mandatory characters for handling newlines transparently.

Parameters:
lineSeparator - the sequence of characters that represent a newline, as defined in Format.getLineSeparator()
normalizedLineSeparator - the normalized newline character (as defined in Format.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.
Method Detail

stop

public void stop()
Stops the CharInputReader from reading characters from the Reader provided in AbstractCharInputReader.start(Reader) and closes it. Also stops the input reading thread.


setReader

protected void setReader(Reader reader)
Starts an input reading thread to load characters from the given reader into "buckets" of characters

Specified by:
setReader in class AbstractCharInputReader
Parameters:
reader - the Reader provided in AbstractCharInputReader.start(Reader)

reloadBuffer

protected void reloadBuffer()
Assigns the next "bucket" of characters to the AbstractCharInputReader.buffer attribute, and updates the AbstractCharInputReader.length to the number of characters read.

Specified by:
reloadBuffer in class AbstractCharInputReader


Copyright © 2017 uniVocity Software Pty Ltd. All rights reserved.