private boolean fillRow(DBFRow row) throws IOException, TikaException {
        if (row == null) {
            return false;
        }
        DBFCell[] cells = row.cells;
        int isDeletedByte = is.read();
        boolean isDeleted = false;
        if (isDeletedByte == 32) {
            //all ok
        } else if (isDeletedByte == 42) { //asterisk
            isDeleted = true;
        } else if (isDeletedByte == 26) { //marker for end of dbf file
            return false;
        } else if (isDeletedByte == -1) { //truncated file
            if (DBFReader.STRICT) {
                throw new IOException("EOF reached too early");
            }
            return false;
        } else {
            throw new TikaException(
                    "Expecting space or asterisk at beginning of record, not:" + isDeletedByte);
        }
        row.setDeleted(isDeleted);

        boolean readSomeContent = false;
        for (DBFCell cell : cells) {
            if (cell.read(is)) {
                readSomeContent = true;
            }
        }
        return readSomeContent;
    }
Iterate through the rows with this.
<p>
Be careful: the reader reuses the row!  Make sure to call deep copy
if you are buffering rows.

@return
@throws IOException
@throws TikaException
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dbf/DBFReader.java