/** * Constructs {@link CSVReader} with supplied {@link CSVParser}. * * @param aReader the reader to an underlying CSV source. * @param aParser the parser to use to parse input * @param bKeepCR <code>true</code> to keep carriage returns in data read, <code>false</code> * otherwise */ public CSVReader( @Nonnull final Reader aReader, @Nonnull final CSVParser aParser, final boolean bKeepCR) { ValueEnforcer.notNull(aReader, "Reader"); ValueEnforcer.notNull(aParser, "Parser"); Reader aInternallyBufferedReader = StreamHelper.getBuffered(aReader); if (bKeepCR) m_aLineReader = new CSVLineReaderKeepCR(aInternallyBufferedReader); else if (aInternallyBufferedReader instanceof BufferedReader) m_aLineReader = new CSVLineReaderBufferedReader((BufferedReader) aInternallyBufferedReader); else { if (!(aInternallyBufferedReader instanceof NonBlockingBufferedReader)) { // It is buffered, but we need it to support readLine aInternallyBufferedReader = new NonBlockingBufferedReader(aInternallyBufferedReader); } m_aLineReader = new CSVLineReaderNonBlockingBufferedReader( (NonBlockingBufferedReader) aInternallyBufferedReader); } m_aReader = aInternallyBufferedReader; m_aParser = aParser; m_bKeepCR = bKeepCR; }