Qiitaにも投稿しましたが、こっちを捨てるのももったいないのでこっちにも。
こっちはほとんど見ている人がいませんし、マルチポストでもいいでしょう。
シンタックスハイライトは向うでやったのをコピペですね。

.NETでストリームを扱う時に、BOMの扱いについて困りましたが、何とか解決。

stream.ToArray()を使う方法があるのですが、
この方法でBOMありのストリームを読みこんだ場合、
BOMも文字列に含まれてしまい、ストリームに書き込んだ文字列と異なってしまいます。

.NETは普通に書き込むとBOMありになるため、
これは困ります。

StreamReaderなどを使いましょう。

var input = "test";
var stream = new MemoryStream();
var writer = new StreamWriter(stream, Encoding.UTF8);

await writer.WriteAsync(input);
await writer.FlushAsync();

stream.Position = 0;
var reader = new StreamReader(stream, Encoding.UTF8);
var output1 = await reader.ReadToEndAsync();

stream.Close();
var output2 = Encoding.UTF8.GetString(stream.ToArray());

var b1 = input == output1; // => true
var b2 = input == output2; // => false