/// <summary> /// This method is used to parse the actual 16bit or 32bit stream header. /// </summary> /// <param name="byteArray">Specify the Byte array.</param> /// <param name="startIndex">Specify the start position.</param> /// <param name="streamObjectHeader">Specify the out value for the parse result.</param> /// <returns>Return true if success, otherwise returns false. </returns> public static int TryParse(byte[] byteArray, int startIndex, out StreamObjectHeaderStart streamObjectHeader) { uint headerType = (uint)(byteArray[startIndex] & 0x3); if (headerType == StreamObjectHeaderStart.StreamObjectHeaderStart16bit) { streamObjectHeader = new StreamObjectHeaderStart16bit(); } else { if (headerType == StreamObjectHeaderStart.StreamObjectHeaderStart32bit) { streamObjectHeader = new StreamObjectHeaderStart32bit(); } else { streamObjectHeader = null; return 0; } } try { return streamObjectHeader.DeserializeFromByteArray(byteArray, startIndex); } catch (InvalidOperationException) { streamObjectHeader = null; return 0; } }