我有一个关闭的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电子邮件消息。
答案 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
它适用于封闭流并返回数据的副本,而不使用缓冲区中未使用的部分。