あるメモリストリームの内容を別のメモリストリームの内容に追加しようとしていますが、両方のメモリストリームに UTF8 でエンコードされたデータが含まれており、結合されたメモリストリームを変換すると UTF8 文字列が返されます。しかし、それは機能していません=> 2番目のメモリストリームがガベージとして追加されています(または、少なくとも、StreamReaderを介して戻ってきません)。何が起こっているのでしょうか?
問題を再現する次の linqpad スクリプトをセットアップしました。
string one = "first memorystream";
string two = ", and the second";
MemoryStream ms = new MemoryStream();
MemoryStream ms2 = new MemoryStream();
byte[] oneb = Encoding.UTF8.GetBytes(one);
byte[] twob = Encoding.UTF8.GetBytes(two);
ms.Write(oneb, 0, oneb.Length);
ms2.Write(twob, 0, twob.Length);
ms.Length.Dump();
ms2.Length.Dump();
ms.Write(ms2.GetBuffer(), (int)ms.Length, (int)ms2.Length);
ms.Length.Dump();
ms.Position = 0;
StreamReader rdr = new StreamReader(ms, Encoding.UTF8);
rdr.ReadToEnd().Dump();
結果は次のとおりです。
18
16
34
first memorystream□□□□□□□□□□□□□□□□
問題は、なぜ「最初のメモリストリームと 2 番目のメモリストリーム」ではないのかということです。
私が間違っていることは何ですか?