欢迎来到天天文库
浏览记录
ID:21662409
大小:81.00 KB
页数:8页
时间:2018-10-23
《c# 温故而知新:stream篇(—)stream》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C#温故而知新:Stream篇(—) 目录:什么是Stream?什么是字节序列?Stream的构造函数Stream的重要属性及方法Stream的示例Stream异步读写Stream和其子类的类图本章总结 什么是Stream?MSDN中的解释太简洁了:提供字节序列的一般视图(我可不想这么理解,这必定让我抓狂,我理解的流是向自然界的河流那样清澈而又美丽,c#中的流也是一样,http://mz.qqq90.com许多技术或者说核心技术都需要流的帮忙)那什么是字节序列呢?其实简单的来理解的话字节序列
2、指的是:字节对象都被存储为连续的字节序列,字节按照一定的顺序进行排序组成了字节序列那什么关于流的解释可以抽象为下列情况:打个比方:一条河中有一条鱼游过,这个鱼就是一个字节,这个字节包括鱼的眼睛,嘴巴,等组成8个二进制,显然这条河就是我们的核心对象:流马上进入正题,让我们来解释下c#的Stream是如何使用的让我们直接温故或学习下Stream类的结构,属性和相关方法首先是构造函数Stream类有一个protected类型的构造函数,但是它是个抽象类,无法直接如下使用Streamstream=new
3、Stream();所以我们自定义一个流继承自Stream看看哪些属性必须重写或自定义:ViewCodepublicclassMyStreamExample:Stream{publicoverrideboolCanRead{get{thrownewNotImplementedException();}}publicoverrideboolCanSeek{get{thrownewNotImplementedException();}}publicoverrideboolCanWrite{get{th
4、rownewNotImplementedException();}}publicoverridevoidFlush(){thrownewNotImplementedException();}publicoverridelongLength{get{thrownewNotImplementedException();}}publicoverridelongPosition{get{thrownewNotImplementedException();}set{thrownewNotImplement
5、edException();}}publicoverrideintRead(byte[]buffer,intoffset,intcount){thrownewNotImplementedException();}publicoverridelongSeek(longoffset,SeekOriginorigin){thrownewNotImplementedException();}publicoverridevoidSetLength(longvalue){thrownewNotImpleme
6、ntedException();}publicoverridevoidWrite(byte[]buffer,intoffset,intcount){thrownewNotImplementedException();}}可以看出系统自动帮我们实现了Stream的抽象属性和属性方法 1: CanRead:只读属性,判断该流是否能够读取: 2: CanSeek:只读属性,判断该流是否支持跟踪查找 3: CanWrite:只读属性,判断当前流是否可写*4:voidFlush():这点必须说得仔细
7、些: 当我们使用流写文件时,数据流会先进入到缓冲区中,而不会立刻写入文件,当执行这个方法后,缓冲区的数据流会立即注入基础流 MSDN中的描述:使用此方法将所有信息从基础缓冲区移动到其目标或清除缓冲区,或者同时执行这两种操作。根据对象的状态,可能需要修 改流内的当前位置(例如,在基础流支持查找的情况下即如此)当使用StreamWriter或BinaryWriter类时,http://www.qqmy2.com不要刷新Stream基对象。 而应使用该类的Flush或Close方
8、法,此方法确保首先将该数据刷新至基础流,然后再将其写入文件。(红色部分为关键请大家务必能够理解,今后会在相应的章节中介绍) 5:Length:表示流的长度*6:Position属性:(非常重要)虽然从字面中可以看出这个Position属性只是标示了流中的一个位置而已,可是我们在实际开发中会发现这个想法会非常的幼稚,很多asp.net项目中文件或图片上传中很多朋友会经历过这样一个痛苦:Stream对象被缓存了,导致了Position属性在流中无法找到正确的位置,这点会让人抓狂,其实解决这个问题很简
此文档下载收益归作者所有