安全地访问MemoryStream中的数据

Bob*_*sky 2 c# memorystream bytearray

假设我有一个MemoryStream以字节为单位的函数.

当前代码是这样的:

void caller()
{
    MemoryStream ms = // not important
    func(ms.GetBuffer(), 0, (int)ms.Length);
}

void func(byte[] buffer, int offset, int length)
{
    // not important
}
Run Code Online (Sandbox Code Playgroud)

我无法改变,func但我希望尽可能减少从内部更改流数据的可能性func.

我怎么能/应该重写代码以确保流数据不会被更改?

或者这不可能做到?

编辑:

对不起,我没有提到我想不复制数据.

Aus*_*nen 5

打电话.ToArray.

func(ms.GetBuffer().ToArray(), 0, (int)ms.Length);
Run Code Online (Sandbox Code Playgroud)

来自MSDN(强调我的):

请注意,缓冲区包含可能未使用的已分配字节.例如,如果将字符串"test"写入MemoryStream对象,则从GetBuffer返回的缓冲区长度为256而不是4,未使用252个字节.要仅获取缓冲区中的数据,请使用ToArray方法; 但是,ToArray会在内存中创建数据副本.


理想情况下,你会改变func采取IEnumerable<byte>.一旦方法具有数组,您就相信如果您不希望它们,则不会修改数据.如果合同提供IEnumerable<byte>的,实施者必须决定他们是否需要一份编辑与否.