我试图将一个内存流的内容附加到另一个内存流的内容,知道两个内存流都包含 UTF8 编码的数据,并在我将组合的内存流转换回来时得到一个 UTF8 字符串。但它不起作用=>第二个内存流被附加为垃圾(或者至少,它没有通过 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□□□□□□□□□□□□□□□□
那么,问题是为什么不是“第一个内存流,第二个”呢?
我做错了什么?