Stupid smart code: Solution

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.

原文地址:https://www.cnblogs.com/shihao/p/2320679.html