为什么 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
.
他们为什么要这样做?
如果 MemoryStream
从 Stream
扩展,这意味着它可以有一个长的 Length
。如果它可以有 long
大小,为什么它不能采用 long
初始容量?
我试图避免初始化没有容量的流,因为我想利用我知道流将有多大的事实,但构造函数似乎限制了这个愿望。
我该如何解决这个问题,为什么 MemoryStream
不能占用 long
容量?
MemoryStream
目前不支持超过 2GB 的数据。这是当前的限制。原则上不必存在。
这只是(尚未)实现的功能的一个例子。
在当前的 CLR 上实现更大的流很困难,它只支持最多包含大约 int.MaxValue
个元素的数组。
根据.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
.
他们为什么要这样做?
如果 MemoryStream
从 Stream
扩展,这意味着它可以有一个长的 Length
。如果它可以有 long
大小,为什么它不能采用 long
初始容量?
我试图避免初始化没有容量的流,因为我想利用我知道流将有多大的事实,但构造函数似乎限制了这个愿望。
我该如何解决这个问题,为什么 MemoryStream
不能占用 long
容量?
MemoryStream
目前不支持超过 2GB 的数据。这是当前的限制。原则上不必存在。
这只是(尚未)实现的功能的一个例子。
在当前的 CLR 上实现更大的流很困难,它只支持最多包含大约 int.MaxValue
个元素的数组。