/// <summary>
        /// 预增数据流长度并序列化数据(4字节对齐)
        /// </summary>
        /// <param name="stream">序列化数据流</param>
        /// <param name="data">数据,不能为null</param>
        internal static void Serialize(UnmanagedStream stream, ref SubArray <byte> data)
        {
            int   dataSize = data.Length;
            byte *write    = stream.GetBeforeMove((dataSize + (3 + sizeof(int))) & (int.MaxValue - 3));

            *(int *)write = dataSize;
            data.CopyTo(new Span <byte>(write + sizeof(int), dataSize));
            stream.Data.SerializeFillLeftByteSize(dataSize);
        }
示例#2
0
        /// <summary>
        /// 写字节数据
        /// </summary>
        /// <param name="start"></param>
        /// <param name="count"></param>
        /// <param name="stream"></param>
        internal void WriteBytes(char *start, int count, UnmanagedStream stream)
        {
            int   size  = GetByteCountNotNull(start, count);
            byte *write = stream.GetBeforeMove(size);

            if ((Type & (EncodingType.Ascii | EncodingType.Unicode)) == 0)
            {
                Encoding.GetBytes(start, count, write, size);
            }
            else if ((Type & EncodingType.Unicode) != 0)
            {
                AutoCSer.Memory.Common.CopyNotNull(start, write, size);
            }
            else
            {
                AutoCSer.Extensions.StringExtension.WriteBytes(start, size, write);
            }
        }