public static bool TryParse(byte[] bytes, out EventTransUnit value)
        {
            if (bytes[0] == (byte)BytesHeaderType.Event)
            {
                var idType             = (ActorIdType)bytes[1];
                var bytesSpan          = bytes.AsSpan();
                var eventTypeLength    = BitConverter.ToUInt16(bytesSpan.Slice(BytesHeadLength, sizeof(ushort)));
                var actorIdBytesLength = BitConverter.ToUInt16(bytesSpan.Slice(BytesHeadLength + sizeof(ushort), sizeof(ushort)));
                var baseBytesLength    = BitConverter.ToUInt16(bytesSpan.Slice(BytesHeadLength + (2 * sizeof(ushort)), sizeof(ushort)));
                var eventBytesLength   = BitConverter.ToInt32(bytesSpan.Slice(BytesHeadLength + (3 * sizeof(ushort)), sizeof(int)));
                var skipLength         = BytesHeadLength + (3 * sizeof(ushort)) + sizeof(int);
                if (idType == ActorIdType.Long)
                {
                    var actorId = BitConverter.ToInt64(bytesSpan.Slice(skipLength + eventTypeLength, actorIdBytesLength));
                    value = new EventTransUnit(
                        Encoding.UTF8.GetString(bytesSpan.Slice(skipLength, eventTypeLength)),
                        actorId,
                        bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength, baseBytesLength).ToArray(),
                        bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength + baseBytesLength, eventBytesLength).ToArray());
                    return(true);
                }
                else if (idType == ActorIdType.String)
                {
                    var actorId = Encoding.UTF8.GetString(bytesSpan.Slice(skipLength + eventTypeLength, actorIdBytesLength));
                    value = new EventTransUnit(
                        Encoding.UTF8.GetString(bytesSpan.Slice(skipLength, eventTypeLength)),
                        actorId,
                        bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength, baseBytesLength).ToArray(),
                        bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength + baseBytesLength, eventBytesLength).ToArray());
                    return(true);
                }
                else if (idType == ActorIdType.Guid)
                {
                    var actorId = Encoding.UTF8.GetString(bytesSpan.Slice(skipLength + eventTypeLength, actorIdBytesLength));
                    value = new EventTransUnit(
                        Encoding.UTF8.GetString(bytesSpan.Slice(skipLength, eventTypeLength)),
                        new Guid(actorId),
                        bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength, baseBytesLength).ToArray(),
                        bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength + baseBytesLength, eventBytesLength).ToArray());
                    return(true);
                }
            }

            value = default;
            return(false);
        }
        public static bool TryParseWithNoId(byte[] bytes, out EventTransUnit value)
        {
            if (bytes[0] == (byte)BytesHeaderType.Event)
            {
                var bytesSpan          = bytes.AsSpan();
                var eventTypeLength    = BitConverter.ToUInt16(bytesSpan.Slice(BytesHeadLength, sizeof(ushort)));
                var actorIdBytesLength = BitConverter.ToUInt16(bytesSpan.Slice(BytesHeadLength + sizeof(ushort), sizeof(ushort)));
                var baseBytesLength    = BitConverter.ToUInt16(bytesSpan.Slice(BytesHeadLength + (2 * sizeof(ushort)), sizeof(ushort)));
                var eventBytesLength   = BitConverter.ToInt32(bytesSpan.Slice(BytesHeadLength + (3 * sizeof(ushort)), sizeof(int)));
                var skipLength         = BytesHeadLength + (3 * sizeof(ushort)) + sizeof(int);

                value = new EventTransUnit(
                    Encoding.UTF8.GetString(bytesSpan.Slice(skipLength, eventTypeLength)),
                    null,
                    bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength, baseBytesLength),
                    bytesSpan.Slice(skipLength + eventTypeLength + actorIdBytesLength + baseBytesLength, eventBytesLength));
                return(true);
            }

            value = default;
            return(false);
        }