ASP.NET-第八天-加强课程
第八天
复习文件流过程:创建,
文件的乱码
通过文件的前几个字节就能判断文件的编码;
StreamReader 与streamWriter
True 表示可以追加
这样做输出的是隔行
微软内部所使用的
练习题工资翻倍显示
对象序列化
就是将对象转换为二进制数据(字节流),反序列化 是将二进制数据还原为对象, 对象是稍纵即逝的, 很容易丢失,
过去:
想要存储一个对象,只能是将, 它的数据存储起来, 下次使用时,必须重新创建一个对象,然后这个对象的属性中的值,是来源于上个对象;;
BinaryFormatter
1.创建二进制对象序列化器
2.创建一个文件流
3.开始执行序列化
在使用序列化的时候, 避免使用自动属性, 每次编译的时候, 自动生成的字段名可能不一样, 在反序列化的时候可能会造成问题;
可被序列化的条件
1.必须类型本身是可序列化的 //类的可被序列化 在类的上面加上 [Serializable]
2.类中所有的字段属性的类型也必须标记为可序列化的;
3.当前类型的所有父类也必须是可序列化的;
反序列化步骤:
1.创建二进制序列化器(格式化器) //无论序列化还是反序列化,都要创建文件流
2.开始执行反序列化;
在执行反序列化的时候,需要原序列化的程序集, 才能序列化; //原因:在反序列化的时候,文件中包含的仅仅是一些数据, 根据这些数据是无法再内存中创建对象的 ,只能是反击原来类型中的数据把数据一一对应进行赋值;
对象的序列化只是对对象的一些状态信息进行序列化(比如: 字段)
对于方法之类的根本不进行序列化,也就是说反序列化文件中值包含字段名和字段值,根本没有方法信息, 但是反序列化的时候,返回的是一个对象,那么直根据这些字段信息是无法创建对象的,所以这个时候需要先根据原来的程序集, 获取序列化的类型,
正则表达式
是对文本和字符串进行操作的;
正则表达式元字符:
1.除\n任意的单个字符
2.[] 如:a[0-9]b 就表示: a0b; a1b; a2b ... . . 还可以取反如a[^0-9]b表示不能是0-9之间的
3.| 表示或的关系 如z|food 就是z ; food ; zood ;
4.() 改变优先级, 提取组;
元字符2(限定符)
5.*限定符,表示前面的表达式可以出现多次或0次,(可有可无,可多可少)
6.+限定符,至少出现1次,可以出现多次
7.?限定符,表示出现0次或者1次; [终止贪婪符]
8.{n}限定前面的表达式 ,必须只能出现5次;
9.{n,m}至少出现n次,最多m次;
10.{n, }至少出现n次
元字符:
1.^abc.x //表示必须以abc开头的式子 如: abc$x;还有非的意思!
2.$ //结束符,同上
3.^和$都有时, 必须完全匹配;
简单元字符:
1.\d:表示一个数字;等同于[0-9]
2.\D:代表非数字, 等同于[^0-9]
3.\s表示换行符, tab制表符等空白字符,(空格, 回车, 制表符)
4.\S:代表非空白字符(a0%$@@)
5.\w匹配字母或数字或下划线
6.\W:非\w,等同于[^\w]%
规则表达式就是正则表达式 //据悉曾是生物学的名词
在.NET中使用正则表达式的时候就用Regex这个类
Regex .IsMatch(); //判断一个字符串中提取匹配正则表达式的某个字符串(只能提取一个)
Regex.Match(); //从某个字符串中提取
例子:
1.^z|food$ //表示以z开头的任意字符串 或者以 food结尾的任意字符串都返回true
原因是:|的优先级最低, 所以上边的表达式其实: (^z)|(food$)
2.^(z|f)ood$ 这个才表示要么是zood 要么是food, 只能匹配这两个
练习:
在进行字符串提取的时候一般不加^和$
字符串提取, 是在原来的字符串中只要找到一部分匹配就可以提取了,所以不加^$,如果加了,就表示提取的字符串完全匹配;
.Groups [n]应该从1开始; 因为0代表的是整个式子;
当正则表达式提取的时候, 默认采用贪婪模式, 如果1个字符也能匹配, 多个字符也能匹配, 这时, 会按照使用最多字符的方式来匹配,这个就叫贪婪模式;
当?出现在式子后面时, 会匹配最小的字符串;