// this involves seeking backwards in the file, which might not
// perform well, but that's OK since we only do this once per file
ByteBuffer index = ByteBuffer.allocate(count * 24);
file.seek(length - 2 * BLOCK_SIZE - 16 - count * 24);
file.readFully(index.array());
index.mark();
CRC32 checksum = new CRC32();
long limit = length - 2 * BLOCK_SIZE - bytes - BLOCK_SIZE;
long lastmsb = Long.MIN_VALUE;
long lastlsb = Long.MIN_VALUE;