class DBaseFileReader implements Iterable<AttributeProvider>, AutoCloseable {

	public DBaseFileRecord readNextDBFRecord() throws IOException {
		if (this.recordCount == -1) {
			throw new MustCallReadHeaderFunctionException();
		}
		if (this.readingPosition >= this.recordCount) {
			return null;
		}

		try {
			// Update the readingPosition attribute AFTER the call to the
			// reading function to avoid invalid usage of its value
			// by this function.
			final DBaseFileRecord record = readDBFRecord(this.readingPosition);
			++this.readingPosition;
			return record;
		} catch (EOFException e) {
			this.finished = true;
			return null;
		}
	}

	@SuppressWarnings("resource") public  DBaseFileReader(InputStream inputStream);
	@SuppressWarnings("resource") public  DBaseFileReader(File file);
	public  DBaseFileReader(URL url);
	public  DBaseFileReader(ReadableByteChannel channel);

}