标签: getbuffer

什么时候MemoryStream上的GetBuffer()有用吗?

我知道,GetBuffer()在C#/一个MemoryStream.NET必须小心使用,因为,作为文档描述了这里,有可能在年底未使用的字节,所以你必须要确保只在第一MemoryStream的期待缓冲区中的.Length字节.

但后来我遇到了一个案例,其中缓冲区开头的字节是垃圾!实际上,如果您使用像反射器这样的工具并查看ToArray(),您可以看到:

public virtual byte[] ToArray()
{
    byte[] dst = new byte[this._length - this._origin];
    Buffer.InternalBlockCopy(this._buffer, this._origin, dst, 0,
        this._length - this._origin);
    return dst;
}
Run Code Online (Sandbox Code Playgroud)

所以要对返回的缓冲区做任何事情GetBuffer(),你真的需要知道_origin.唯一的问题是_origin是私有的,没有办法实现它......

所以我的问题是-什么是使用GetBuffer()MemoryStream()无将MemoryStream是如何构造的一些先验知识(这是什么套_origin)?

(正是这个构造函数,只有这个构造函数,设置原点 - 当你想要一个字节数组的MemoryStream从字节数组中的特定索引开始时:

public MemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible)
Run Code Online (Sandbox Code Playgroud)

)

.net memorystream getbuffer

33
推荐指数
7
解决办法
2万
查看次数

为什么MemoryStream.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(),因为它会复制.

windows memorystream exception getbuffer

18
推荐指数
3
解决办法
2万
查看次数

如果我在GetBuffer之后没有调用ReleaseBuffer怎么办?

CString到char*,ReleaseBuffer()必须在之后使用GetBuffer().但为什么?如果我不使用ReleaseBuffer()后会发生什么GetBuffer()

有人能告诉我一个例子吗?谢谢.

c++ mfc c-strings getbuffer

14
推荐指数
1
解决办法
8117
查看次数

CString::GetBuffer() 示例

我试图理解 GetBuffer() 函数。看起来它返回指向 CString 的指针,这在msdn GetBuffer() 中得到确认 。但是,我不明白msdn GetBuffer() 中显示的示例。

LPTSTR p = s.GetBuffer( 10 );
Run Code Online (Sandbox Code Playgroud)

里面是10有什么原因吗?谁能告诉我这个例子的输出?

c++ msdn getbuffer

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

getbuffer ×4

c++ ×2

memorystream ×2

.net ×1

c-strings ×1

exception ×1

mfc ×1

msdn ×1

windows ×1