public E readNext() throws IOException {
		if (strategy.isSkipHeader() && !firstLineRead) {
			reader.readLine();
		}

		E entry = null;
		boolean validEntry = false;
		do {
			String line = readLine();
			if (line == null) {
				return null;
			}

			if (line.trim().length() == 0 && strategy.isIgnoreEmptyLines()) {
				continue;
			}

			if (isCommentLine(line)) {
				continue;
			}

			List<String> data = tokenizer.tokenizeLine(line, strategy, reader);
			entry = entryParser.parseEntry(data.toArray(new String[data.size()]));

			validEntry = entryFilter != null ? entryFilter.match(entry) : true;
		} while (!validEntry);

		firstLineRead = true;

		return entry;
	}