The reason that I said that this is very stupid code?
public static void WriteDataToRequest(HttpWebRequest req, string data) { var byteCount = Encoding.UTF8.GetByteCount(data); req.ContentLength = byteCount; using (var dataStream = req.GetRequestStream()) { if(byteCount <= 0x1000) // small size, just let the system allocate it { var bytes = Encoding.UTF8.GetBytes(data); dataStream.Write(bytes, 0, bytes.Length); dataStream.Flush(); return; } var buffer = new byte[0x1000]; var maxCharsThatCanFitInBuffer = buffer.Length / Encoding.UTF8.GetMaxByteCount(1); var charBuffer = new char[maxCharsThatCanFitInBuffer]; int start = 0; var encoder = Encoding.UTF8.GetEncoder(); while (start < data.Length) { var charCount = Math.Min(charBuffer.Length, data.Length - start); data.CopyTo(start, charBuffer, 0, charCount); var bytes = encoder.GetBytes(charBuffer, 0, charCount, buffer, 0, false); dataStream.Write(buffer, 0, bytes); start += charCount; } dataStream.Flush(); } }
Because all of this lovely code can be replaced with a simple:
public static void WriteDataToRequest(HttpWebRequest req, string data) { req.ContentLength = Encoding.UTF8.GetByteCount(data); using (var dataStream = req.GetRequestStream()) using(var writer = new StreamWriter(dataStream, Encoding.UTF8)) { writer.Write(data); writer.Flush(); } }
And that is so much better.