Derived classes need to provide a common header instance (i.e., class that implements ICommonHeader) for the output types; this will primarily include an ID of the Type that the data image represents. This parsing is only for common header information, actual parsing will be handled by output type via its Initialize(array<Byte>[]()[][], Int32, Int32) method. This header image should also be used to add needed complex state information about the output type being parsed if needed.
If there is not enough buffer available to parse common header (as determined by length), return null. Also, if the protocol allows frame length to be determined at the time common header is being parsed and there is not enough buffer to parse the entire frame, it will be optimal to prevent further parsing by returning null.