如何确定MemoryStream是否是固定大小的?

时间:2013-06-19 14:56:08

标签: c# memorystream expandable

我的方法将MemoryStream作为参数。我怎么知道这个MemoryStream是否可扩展?

可以使用“new MemoryStream(byte [] buf)”使用数组创建MemoryStream。这意味着流将具有固定大小。您无法向其附加数据。 另一方面,可以使用“new MemoryStream()”创建没有参数的流。在这种情况下,您可以向其追加数据。

问题:我怎么知道 - 我能否安全地在当前流中附加数据,或者我必须创建一个新的可扩展流并将数据复制到其中?

2 个答案:

答案 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截断,但无论如何......你可以做的最好的事情总是使用可扩展的流,或者如果你不控制代码的那个方面...也许尝试捕获你的扩展流的尝试,如果它失败了,将它复制到一个可写的流并再次递归调用该方法?