public MarcRecord getNextRecord() throws MarcException {
        MarcRecord rec = MarcWorxDataHelper.createMarcRecord(RecordTypeConstants.RECORD_TYPE_BIBLIOGRAPHIC_BOOK);
        if (objectStatus != 0) {
            rec.setReadStatus(MarcFileReadStatus.ERROR);
            return rec;
        }
        
        MarcFileReadStatus eStatus = packBuffer(MarcReaderConstants.MINIMUM_RECORD);
        if (eStatus != MarcFileReadStatus.VALID) {
            if (filePosition == fileSize && bufferPosition == dataLength) {
                eStatus = MarcFileReadStatus.ALLDONE;
            }
            rec.setReadStatus(eStatus);
            return rec;
        }
        int u_recordLength = 0;
        eStatus = checkCommFormat();
        if(eStatus != MarcFileReadStatus.VALID) {
            rec.setReadStatus(eStatus);
            return rec;
        }
        String commFormatLength = new String(buffer, bufferPosition, 5);
        try {
            u_recordLength = Integer.parseInt(commFormatLength);
        } catch (NumberFormatException ex) {
            throw new MarcException(MarcExceptionType.NUMBER_FORMAT, "Unable to determine length of USMArc record", ex);
        }
        eStatus = packBuffer(u_recordLength);
        if(eStatus != MarcFileReadStatus.VALID) {
            rec.setReadStatus(eStatus);
            return rec;
        }
//        String commFormatRecord = new String(buffer, bufferPosition, u_recordLength);
        rec = translateCommFormatFromBytes(buffer, bufferPosition, u_recordLength);
        if(rec.getReadStatus() == MarcFileReadStatus.ERROR) {
            return rec;
        }

        bufferPosition += u_recordLength;
        recordNumber++;
        return rec;
    }