private static int GetPreambleLength(ArraySegment <byte> buffer, Encoding encoding) { byte[] array = buffer.Array; int offset = buffer.Offset; int count = buffer.Count; switch (encoding.CodePage) { case 1200: return(count < 2 || array[offset] != byte.MaxValue || array[offset + 1] != (byte)254 ? 0 : 2); case 1201: return(count < 2 || array[offset] != (byte)254 || array[offset + 1] != byte.MaxValue ? 0 : 2); case 12000: return(count < 4 || array[offset] != byte.MaxValue || (array[offset + 1] != (byte)254 || array[offset + 2] != (byte)0) || array[offset + 3] != (byte)0 ? 0 : 4); case 65001: return(count < 3 || array[offset] != (byte)239 || (array[offset + 1] != (byte)187 || array[offset + 2] != (byte)191) ? 0 : 3); default: byte[] preamble = encoding.GetPreamble(); return(!HttpContent.BufferHasPrefix(buffer, preamble) ? 0 : preamble.Length); } }