从GetBuffer获得的字节数组中获取仅分配的字节是否安全?

时间:2011-11-18 13:09:29

标签: c# .net mime-message

我有一个关闭的MemoryStream实例(不要问,不能改变它,并不是那个糟糕的设计,因为它似乎乍一看:)。 无论如何,我发现我可以使用类似的东西来获取byte []:

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

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

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

我的问题是,可以安全地假设我可以读取数组,直到我遇到第一个0? 你知道在数据中间会有(字节)0的情况吗? 该数据是MIME电子邮件消息。

2 个答案:

答案 0 :(得分:3)

msdn article on MemoryStream.GetBuffer Method

  

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

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

答案 1 :(得分:3)

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

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