private IndexNode(long reference) throws IOException {
this.reference = reference;
RandomAccessFile rafile = getIndexFile();
rafile.seek(reference);
BufferedDataInput bdi = new BufferedDataInput(rafile);
readHeader(bdi);
List<IndexEntry> entriesList = new ArrayList<IndexEntry>(100);
Object upperBound;
while ((upperBound = readEntity(bdi, false, false)) != END_OF_LIST) {
byte start;
do {
// see it is a reference first
bdi.mark();
start = bdi.readByte();
bdi.goBackOne();
if (start == HEADER_INDEX_REFERENCE_INTEGER || start == HEADER_INDEX_REFERENCE_LONG) {
// it is a reference, continue
reference = readVarLong(bdi);
entriesList.add((IndexEntry) (depth == 0 ? new IndexEntry(upperBound, reference) : new BranchEntry(upperBound, reference,
readVarLong(bdi))));
} else
break;
} while (true);
//TODO: Make the last one a special entry that records the size of the linked list
}
allDescendants = bdi.readLong();
entries = new IndexEntry[entriesList.size()];
entriesList.toArray(entries);
}