void deserialize(MsfStream directoryStream)
			throws IOException, PdbException, CancelledException {
		// Read whole stream and then take selections from the byte array, as needed.
		int length = directoryStream.getLength();
		byte[] bytes = directoryStream.read(0, length);
		PdbByteReader reader = new PdbByteReader(bytes);

		// V2.00 has short followed by an unused short.  We will presume it 0x0000 and process all
		// four bytes into an integer--hopefully not hurting our first short value.
		// This allows the V2.00 and V7.00 to use the same code for getting numStreams.
		int numStreams = reader.parseInt();
		checkMaxStreamsExceeded(numStreams);

		// Get stream lengths and create streams.
		for (int streamNum = 0; streamNum < numStreams; streamNum++) {
			msf.checkCancelled();
			int streamLength = reader.parseInt();
			parseExtraField(reader);
			MsfStream stream = new MsfStream(msf, streamLength);
			mapStreamNumberToStream.add(stream);
		}

		// Populate the streams with their page information.
		for (int streamNum = 0; streamNum < numStreams; streamNum++) {
			msf.checkCancelled();
			MsfStream stream = mapStreamNumberToStream.get(streamNum);
			if (stream != null) {
				stream.deserializePageNumbers(reader);
			}
		}

		// Now replace the directoryStream in the table with the directoryStream taken from the
		//  header, as it is more up-to-date than then entry in the table.
		setStream(msf.getDirectoryStreamNumber(), directoryStream);
	}
Loads Stream Table information from the serial stream contained in the Directory Stream.
@param directoryStream The {@link MsfStream} that contains the serial information to be
 deserialized
@throws IOException on file seek or read, invalid parameters, bad file configuration, or
 inability to read required bytes
@throws PdbException upon error with PDB format
@throws CancelledException upon user cancellation
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/msf/MsfStreamTable.java