我的方法获得MemoryStream作为参数。我如何知道这个内存流是否可扩展?
MemoryStream可以使用数组"new MemoryStream(byte[] buf)"来创建。这意味着流的大小是固定的。你不能向它追加数据。另一方面,可以使用"new MemoryStream()"在没有参数的情况下创建流。在这种情况下,您可以向它附加数据。
问题:我怎么知道-我可以安全地在当前流中添加数据,还是必须创建一个新的可扩展流并将数据复制到它?
您可以使用反射:
static bool IsExpandable(MemoryStream stream)
{
return (bool)typeof(MemoryStream)
.GetField("_expandable", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.GetValue(stream);
}
我不知道是否有更干净/更安全的方法来检索这些信息
在某种意义上,它实际上不是一个固定的大小,更好地定义为"不可扩展",因为它仍然可以通过SetLength截断,但无论如何…也许你能做的最好的事情就是始终使用可扩展流,或者如果你不能控制代码的这一方面……也许尝试捕获您扩展流的尝试,如果失败,将其复制到可写流并再次递归调用该方法?