2

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

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

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

4

2 回答 2

1

您可以使用反射来做到这一点:

static bool IsExpandable(MemoryStream stream)
{
    return (bool)typeof(MemoryStream)
        .GetField("_expandable", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
        .GetValue(stream);
}

我不知道是否有更清洁/更安全的方式来检索此信息。

于 2013-06-19T15:06:45.013 回答
0

从某种意义上说,它实际上并不是一个固定大小,更好地定义为“不可扩展”,因为它仍然可以通过 SetLength 截断,但无论如何......您能做的最好的事情可能是始终使用可扩展流,或者如果您不要控制代码的那个方面...也许尝试抓住您扩展流的尝试,如果失败,将其复制到可写流并再次递归调用该方法?

于 2013-06-19T15:08:17.857 回答