我在做一些项目欧拉练习,我碰到一个场景,我已经想这比2,147,483,647(上限更大的阵列int在C#).
当然这些是大型阵列,但是,例如,我不能这样做
// fails
bool[] BigArray = new BigArray[2147483648];
// also fails, cannot convert uint to int
ArrayList BigArrayList = new ArrayList(2147483648);
Run Code Online (Sandbox Code Playgroud)
那么,我可以拥有更大的阵列吗?
我已经看过这个代码示例 - 从Stream读入缓冲区:
byte[] buffer = new byte[1024 * 32];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但是看第二个参数stream.Read(..,0,..)是缓冲区中从零开始的字节偏移量,开始存储从当前流中读取的数据.
那么每次偏移是0吗?谁说它不会覆盖这些索引的数据?
恰恰相反:我也看到了这个例子:
int read, offset = 0;
while(count > 0 && (read = source.Read(buffer, offset, count)) > 0) {
offset += read;
count -= read;
}
Run Code Online (Sandbox Code Playgroud)
所以这里的偏移量在每次读数后都会被抵消(这对我来说似乎更合乎逻辑)
但我必须遗漏一些东西:
我的观察是对的吗?我什么时候应该使用每个案例?
NB,我的pov是网络流:发送文件.