code: public List<T> readAll(Reader reader, Collection<ParseError> parseErrors) throws IOException, ParseException {
  		checkEntityConfig();
  		BufferedReader bufferedReader = new BufferedReaderLineCounter(reader);
  		try {
  			ParseError parseError = null;
  			// we do this to reuse the parse error objects if we can
  			if (parseErrors != null) {
  				parseError = new ParseError();
  			}
  			if (firstLineHeader) {
  				if (readHeader(bufferedReader, parseError) == null) {
  					if (parseError != null && parseError.isError()) {
  						parseErrors.add(parseError);
  					}
  					return null;
  				}
  			}
  			return readRows(bufferedReader, parseErrors);
  		} finally {
  			bufferedReader.close();
  		}
  	}
docs: Read in all of the entities in the reader passed in. It will use an internal buffered reader.
  
  @param reader
  Where to read the header and entities from. It will be closed when the method returns.
  @param parseErrors
  If not null, any errors will be added to the collection and null will be returned. If validateHeader
  is true and the header does not match then no additional lines will be returned. If this is null then
  a ParseException will be thrown on parsing problems.
  @return A list of entities read in or null if parseErrors is not null.
  @throws ParseException
  Thrown on any parsing problems. If parseErrors is not null then parse errors will be added there and
  an exception should not be thrown.
  @throws IOException
  If there are any IO exceptions thrown when reading.