static StreamRequest parseStreamRequestHeader(byte[] headerBytes) throws IOException {
		String head = new String(headerBytes);
		if (headerBytes.length != HEADER_LENGTH) {
			throw new IllegalArgumentException("invalid headerBytes length");
		}
		if (!head.startsWith(HEADER_PREFIX) || !head.endsWith(HEADER_SUFFIX)) {
			throw new IOException("invalid block stream header");
		}
		String streamIdStr = head.substring(HEADER_PREFIX.length(), HEADER_PREFIX.length() + 16);
		String authTokenStr =
			head.substring(HEADER_PREFIX.length() + 16, HEADER_PREFIX.length() + 32);
		try {
			long streamID = Long.parseUnsignedLong(streamIdStr, 16);
			long authToken = Long.parseUnsignedLong(authTokenStr, 16);
			return new StreamRequest(streamID, authToken);
		}
		catch (NumberFormatException e) {
			throw new IOException("invalid request header stream ID: " + streamIdStr);
		}
	}
Parse a block stream connection header to obtain the stream ID
@param headerBytes stream request header sent by client
@return StreamRequest containing stream ID and authentication token
@throws IOException if header parse fails
Ghidra/Features/GhidraServer/src/main/java/ghidra/server/stream/RemoteBlockStreamHandle.java