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