/// <summary> /// 设置输出数据 /// </summary> /// <param name="value"></param> /// <param name="isAscii"></param> /// <param name="encoding"></param> internal unsafe void SetBody(string value, bool isAscii, ref EncodingCache encoding) { if (value.Length == 0) { SetBody(); } else { freeBody(); if (isAscii && encoding.IsCompatibleAscii != 0) { int size = value.Length; AutoCSer.SubBuffer.Pool.GetBuffer(ref SubBuffer, size); fixed(char *textFixed = value) fixed(byte *bufferFixed = SubBuffer.GetFixedBuffer()) { if (SubBuffer.PoolBuffer.Pool == null) { Body.Array = SubBuffer.Buffer; AutoCSer.Extensions.StringExtension.WriteBytes(textFixed, size, bufferFixed); SubBuffer.Buffer = null; Type = ResponseType.ByteArray; } else { Body.Set(SubBuffer.Buffer, SubBuffer.StartIndex, size); AutoCSer.Extensions.StringExtension.WriteBytes(textFixed, size, bufferFixed + Body.Start); Type = ResponseType.SubBuffer; } } } else { int size = encoding.GetByteCountNotNull(value); AutoCSer.SubBuffer.Pool.GetBuffer(ref SubBuffer, size); if (SubBuffer.PoolBuffer.Pool == null) { encoding.WriteBytesNotEmpty(value, Body.Array = SubBuffer.Buffer); SubBuffer.Buffer = null; Type = ResponseType.ByteArray; } else { Body.Set(SubBuffer.Buffer, SubBuffer.StartIndex, size); encoding.WriteBytesNotEmpty(value, Body.Array, Body.Start); Type = ResponseType.SubBuffer; } } } }
public void Write(AutoCSer.WebView.HashUrl url) { Encoding.WriteBytes(url.Path, Stream); if (!string.IsNullOrEmpty(url.Query)) { Encoding.WriteUrlHash(Stream); Encoding.WriteBytesNotEmpty(url.Query, Stream); } }
internal void WriteNotPool(string value, byte[] buffer, ref EncodingCache encoding) { Buffer.Set(buffer, 0); WriteIndex = encoding.WriteBytesNotEmpty(value, buffer); IsWait = false; }
internal void Write(string value, ref EncodingCache encoding) { WriteIndex += encoding.WriteBytesNotEmpty(value, Buffer.Buffer, WriteIndex); }