code: public List<T> readRows(BufferedReader bufferedReader, Collection<ParseError> parseErrors)
  			throws IOException, ParseException {
  		checkEntityConfig();
  		ParseError parseError = null;
  		// we do this to reuse the parse error objects if we can
  		if (parseErrors != null) {
  			parseError = new ParseError();
  		}
  		List<T> results = new ArrayList<T>();
  		while (true) {
  			if (parseError != null) {
  				parseError.reset();
  			}
  			T result = readRow(bufferedReader, parseError);
  			if (result != null) {
  				results.add(result);
  			} else if (parseError != null && parseError.isError()) {
  				// if there was an error then add it to the list
  				parseErrors.add(parseError);
  				// once we use it, we need to create another one
  				parseError = new ParseError();
  			} else {
  				// if no result and no error then EOF
  				return results;
  			}
  		}
  	}
docs: Read in all of the entities in the reader passed in but without the header.
  
  @param bufferedReader
  Where to read the entries from. It needs to be closed by the caller. Consider using
  {@link BufferedReaderLineCounter} to populate the line-number for parse errors.
  @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.