永发信息网

一个关于C# 中System.Stream的问题

答案:2  悬赏:40  手机版
解决时间 2021-04-04 07:32
一个关于C# 中System.Stream的问题
最佳答案
请看这句:
int n = s.Read(bytes, numBytesRead, 10);

Stream.Read返回值是读取了多少字节,如果返回值为0,说明到头了。

你出错不是因为Stream.Read出错了,而是你定义的bytes太小了,超出了访问范围。
如果你定义
byte[] bytes = new byte[s.Length + 10];
然后你再把count改成95之类的,你就会发现不会报错了

如果你不知道将要读取的流长度是多少,记得一定定义一个足够大的数组来存数据追问一样还是会有问题,我觉得问题不是buffer的大小,而是已经读到结尾但是程序还期待更多的读入,因为count的大小比余下的字节多...追答你的观点是错的。

其实这个很容易验证,参考以下代码
我读取了超过stream长度的数据,但仍然不会出错,只不过n为0而已

Stream s = new MemoryStream();
for (int i = 0; i < 5; i++)
{
s.WriteByte((byte)i);
}

s.Position = 0;

byte[] bytes = new byte[100];

int n = s.Read(bytes, 0, 10);
Console.WriteLine(n);
n = s.Read(bytes, 10, 10);
Console.WriteLine(n);
全部回答
必须知道要读入内容的大小,否则的话,只能像字符串一样,以一个特殊字符,如\0 ,做为读入的结束标记符。追问但是在实际问题中,并不是总是知道要读入的内容大小呀,这种情况怎么办?谢谢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
缺亏的意思是什么,功亏一篑的亏是什么意思啊
现在待业证明怎么开。不是本地户口。需要什么
请问大三房和小三房在格局上有什么不同
月经期间吃什么好排毒排污血淡斑 七个食谱大
单选题练习徒手切片时,右手要捏紧两片并紧的
从上海浦东机场到宝杨路一号乘车
uedbet提款到账要多久
PASSTER有几种车型
制作红油用的辣椒是新鲜的湿辣椒还是晒干的?
请简要论述连杆机构有何传动特点以及连杆机构
金钱龟多少钱一只2016
日语专业 读双学位还是去日本做交换生一年
如何教育小学生,如何教育学生
2016年呼和浩特市第十八中学第一志愿录取分数
单选题清代学者叶燮曾说:“孤芳独美,不如集
推荐资讯
了解一下浙江的七选三
后背长期痒是怎么回事,后背有时会痒是怎么回
真不明白为什么生了女孩都怪女的
玫瑰花有保质期吗,玫瑰花的保质期是多久??
艾青跟新疆有关的诗歌,有关共青团员的诗歌(
如何在特推上改用户名
蟹瓜兰要开花了,可以加肥料吗?
比喻别人很恶心的句子,形容要自己优秀,才能配
skt限定皮肤在哪里买?
把0.01056四舍五入,保留三个有效数字,所得
绿色开花植物几乎都是以种子开始新的生命的
梦幻诛仙手游合欢装备怎么选择 合欢装备选择
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?