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

Why does MemoryStream not offer a constructor taking a "long" capacity?

根据.NET MemoryStream - Should I set the capacity?, it's preferred to set the initial capacity of a MemoryStream如果你事先知道。

在我的代码中,我正在接收(来自第三方库)一个 Stream 对象。这个 Stream 包裹着一个 GetObjectResponse class.

由于这个class会在事务关闭后被销毁,所以我需要复制接收到的流,以便以后继续使用它。

Stream class 公开了一个 Length 属性 来确定流的长度,因此作为开始复制过程的第一步,我开始写:

Stream destination = new MemoryStream(response.ResponseStream.Length);

但是编译器抛出一个错误,指出 MemoryStream 没有采用 long 参数,而是采用 int.

他们为什么要这样做?

如果 MemoryStreamStream 扩展,这意味着它可以有一个长的 Length。如果它可以有 long 大小,为什么它不能采用 long 初始容量?

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

我该如何解决这个问题,为什么 MemoryStream 不能占用 long 容量?

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

这只是(尚未)实现的功能的一个例子。

在当前的 CLR 上实现更大的流很困难,它只支持最多包含大约 int.MaxValue 个元素的数组。