Windows 为什么MemoryStream.GetBuffer()总是抛出?
以下代码将始终抛出 UnauthorizedAccessException(无法访问MemoryStream的内部缓冲区。) 这是在一个普通的旧控制台应用程序,我作为管理员运行。我无法想象我能给这个代码一个更特权的设置。那为什么我不能到这个缓冲区?(如果没有人可以,GetBuffer方法的意义是什么?) MSDN文件说 使用创建MemoryStream实例的步骤 公开可见的缓冲区,使用 记忆流, 内存流(数组[],Int32, Int32,布尔型,布尔型),或 内存流(Int32) 我不是在这样做吗Windows 为什么MemoryStream.GetBuffer()总是抛出?,windows,exception,memorystream,getbuffer,Windows,Exception,Memorystream,Getbuffer,以下代码将始终抛出 UnauthorizedAccessException(无法访问MemoryStream的内部缓冲区。) 这是在一个普通的旧控制台应用程序,我作为管理员运行。我无法想象我能给这个代码一个更特权的设置。那为什么我不能到这个缓冲区?(如果没有人可以,GetBuffer方法的意义是什么?) MSDN文件说 使用创建MemoryStream实例的步骤 公开可见的缓冲区,使用 记忆流, 内存流(数组[],Int32, Int32,布尔型,布尔型),或 内存流(Int32) 我不是在这样
另外,我不想使用ToArray(),因为这会产生一个副本。您使用的似乎是
MemoryStream(array[])
,它与文档中提到的三个版本中的任何一个都不匹配。是您正在使用的MemoryStream(byte[])
构造函数的文档。它特别指出:
此构造函数不公开基础流。GetBuffer引发UnauthorizedAccessException
您应该改用构造函数,使用publilyvisible=true
检查文档中的
使用创建MemoryStream实例的步骤
公开可见的缓冲区,使用
MemoryStream,MemoryStream(字节[],
Int32,Int32,布尔型,布尔型),或
内存流(Int32)。如果当前
流可调整大小,为此调用两次
方法不返回相同的数组,如果
已调整基础字节数组的大小
通话间隙。额外的
有关详细信息,请参阅容量
您需要使用不同的构造函数。若要添加到其他人已在此处添加的内容中 另一种让代码工作的方法是将代码更改为以下行
byte[] buf2 = ms.ToArray();
如果您不想指定构造函数的所有参数,只想获得publiclyVisible参数,那么可以使用只包含int32参数的参数,如@Dolphin的答案中所指定的。
byte[] buf2 = ms.ToArray();