void deserializeDirectory(PdbByteReader reader)
			throws IOException, PdbException, CancelledException {

		// Get the buffer of strings
		nameBufferSize = reader.parseInt();
		PdbByteReader nameBufferReader = reader.getSubPdbByteReader(nameBufferSize);

		// Get the number of pairs and the number of entries (which should be 2 * number of pairs)
		numPairs = reader.parseInt();
		domainSize = reader.parseInt();

		// Using an arbitrary-valued check here for a number too big.
		//  Really do not expect there to be many names in name table (from experience); could
		//  be on the order of 1 or 10.
		if (numPairs > 0x100000) {
			throw new PdbException("Num Pairs too large.");
		}
		if (numPairs < 0) {
			throw new PdbException("Illegal negative value.");
		}

		names = new String[numPairs];
		streamNumbers = new int[numPairs];

		// Read Present Set.  Not really needed by us, as we use the java HashMap.
		presentList.parse(reader, pdb.getMonitor());

		// Read Deleted Set.  Not really needed by us, as we use the java HashMap.
		deletedList.parse(reader, pdb.getMonitor());

		// Read values of index into buffer and name index.  Load the HashMaps.
		// Since we are using the java HashMap, we do not need to mimic the
		// isPresent Dense Bit Array List (which would, instead, use a for-loop limit
		// of domainSize) and do not need to store the domain and range items
		// in a list indexed by i.
		for (int i = 0; i < numPairs; i++) {
			pdb.checkCancelled();
			int bufOffset = reader.parseInt();
			int streamNumber = reader.parseInt();
			nameBufferReader.setIndex(bufOffset);
			String name = nameBufferReader.parseNullTerminatedString(
				pdb.getPdbReaderOptions().getOneByteCharset());
			streamNumbers[i] = streamNumber;
			names[i] = name;
			namesByStreamNumber.put(streamNumber, name);
			streamNumbersByName.put(name, streamNumber);
		}
		deserializeNameTableStreams();
	}
Deserializes the Directory
@param reader {@link PdbByteReader} from which to deserialize the data
@throws IOException on file seek or read, invalid parameters, bad file configuration, or
 inability to read required bytes
@throws PdbException upon error parsing a string
@throws CancelledException upon user cancellation
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/NameTable.java