void deserializeNameTableStreams()
			throws IOException, PdbException, CancelledException {
		for (int streamNumber : streamNumbers) {
			pdb.checkCancelled();
			Map<Integer, String> stringsByOffset = new HashMap<>();
			PdbByteReader reader = pdb.getReaderForStreamNumber(streamNumber);
			if (reader.getLimit() >= 12) {
				long hdrMagic = reader.parseUnsignedIntVal();
				int hdrVer = reader.parseInt();
				if ((hdrMagic == HEADER_MAGIC) && (hdrVer != 0)) {
					switch (hdrVer) {
						case 1:
							// We know this works ver hdrVer==1.
							int length = reader.parseInt();
							PdbByteReader stringReader = reader.getSubPdbByteReader(length);
							while (stringReader.hasMore()) {
								pdb.checkCancelled();
								int offset = stringReader.getIndex();
								String string = stringReader.parseNullTerminatedUtf8String();
								stringsByOffset.put(offset, string);
							}
							// TODO: ? process the rest of the data in reader ?
							break;
						case 2:
						default:
							// TODO: unknown format
							break;
					}
				}
				else {
					// Back up for nonexistent hdrMagic and hdrVer.
					reader.setIndex(reader.getIndex() - 8);
					// TODO: unknown format
				}
			}
			stringTablesByStreamNumber.put(streamNumber, stringsByOffset);
		}

		int namesStreamNumber = getStreamNumberFromName("/names");
		namesByOffset = stringTablesByStreamNumber.get(namesStreamNumber);

	}
Deserializes Name Table Streams.  An offset-to-string map is created for each stream; each
 map is placed into a stream-number-to-map map
@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