/// <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); }
/// <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); } }