I. *_*edy 18 windows memorystream exception getbuffer
以下代码将始终抛出UnuthorizedAccessException(无法访问MemoryStream的内部缓冲区.)
byte[] buf1 = { 2, 3, 5, 7, 11 };
var ms = new MemoryStream(buf1);
byte[] buf2 = ms.GetBuffer(); // exception will be thrown here
Run Code Online (Sandbox Code Playgroud)
这是一个普通的旧控制台应用程序,我作为管理员运行.我无法想象我可以给出这个代码更具特权的设置.那么为什么我不能进入这个缓冲区呢?(如果没有人可以,GetBuffer方法有什么意义?)
MSDN文档说
要使用公共可见缓冲区创建MemoryStream实例,请使用MemoryStream,MemoryStream(array [],Int32,Int32,Boolean,Boolean)或MemoryStream(Int32).
我不这样做吗?
PS我不想使用ToArray(),因为它会复制.
检查文档中的MemoryStream.GetBuffer()
若要创建具有公共可见缓冲区的MemoryStream实例,请使用MemoryStream,MemoryStream(Byte [],Int32,Int32,Boolean,Boolean)或MemoryStream(Int32)。如果当前流是可调整大小的,则在两次调用之间调整基础字节数组的大小时,对此方法的两次调用不会返回同一数组。有关更多信息,请参见容量。
您需要使用其他构造函数。
小智 5
添加到其他人已经在这里放入的内容...
使代码正常工作的另一种方法是将代码更改为以下行。
byte[] buf2 = ms.ToArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16200 次 |
| 最近记录: |