为什么MemoryStream不提供具有"长"容量的构造函数?

Mat*_*ero 6 .net c# memory io stream

根据.NET MemoryStream - 我应该设置容量吗?,如果您事先知道,最好设置MemoryStream的初始容量.

在我的代码中,我(从第三方库)收到一个Stream对象.这Stream是一个GetObjectResponse课程.

由于此类将在事务关闭后处理,我需要复制收到的流,以便我可以继续使用它.

所述Stream类公开长度属性来确定流的长度,所以,作为初始步骤,开始复制处理我开始写:

Stream destination = new MemoryStream(response.ResponseStream.Length);
Run Code Online (Sandbox Code Playgroud)

但编译器会抛出一个错误,说明MemoryStream不接受long参数,而是需要一个int.

他们为什么要这样做?

如果MemoryStream延伸Stream,这意味着它可以有一个长Length.如果它有一个long尺寸,为什么不能采取long初始容量?

我试图避免初始化没有容量的流,因为我想利用这个事实,我知道流将有多大,但构造函数似乎限制了这个愿望.

我怎样才能解决这个问题,为什么MemoryStream不能接受这个long

usr*_*usr 7

MemoryStream目前不支持超过2GB的数据.这是目前的限制.它原则上不必存在.

这仅仅是未实现的功能的情况.

在当前的CLR上实现更大的流是困难的,其仅支持具有最多约int.MaxValue元素的阵列.

  • 它原则上必须存在.您不能索引其GetBuffer()和ToArray()成员返回的数组,否则,数组索引必须小于int.MaxValue. (2认同)