0

我有一个已关闭的 MemoryStream 实例(不要问,不能改变它,它的设计并不像乍一看那样糟糕:)。无论如何,我发现我可以使用以下方式获取 byte[]:

MemoryStream ms = SomeClass.GetMemoryStream();
byte[] myData = ms.GetBuffer();

到目前为止一切似乎都很好,我唯一的问题是从 GetBuffer() 返回的字节数组已调整大小并包含未分配的空间 (byte)0; 像这样:

12,32,43,43,2,3,0,0,0,0,0,0,0

我的问题是假设我可以读取数组直到遇到第一个 0 是否安全?您是否知道数据中间会有 (byte)0 的任何情况?数据是 MIME 电子邮件消息。

4

2 回答 2

3

关于 MemoryStream.GetBuffer 方法的msdn 文章

请注意,缓冲区包含可能未使用的已分配字节。例如,如果将字符串“test”写入 MemoryStream 对象,则从 GetBuffer 返回的缓冲区长度为 256,而不是 4,其中 252 个字节未使用。要仅获取缓冲区中的数据,请使用 ToArray 方法;但是,ToArray 会在内存中创建数据的副本。

尽管副本看起来像你应该做的......

于 2011-11-18T13:13:07.133 回答
3

试试ms.ToArray():http: //msdn.microsoft.com/en-us/library/system.io.memorystream.toarray.aspx

它适用于封闭的流并返回数据的副本,没有缓冲区的未使用部分。

于 2011-11-18T13:14:49.743 回答