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.
我怎么能/应该重写代码以确保流数据不会被更改?
或者这不可能做到?
编辑:
对不起,我没有提到我想不复制数据.
打电话.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>的,实施者必须决定他们是否需要一份编辑与否.
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |