基础加强6之文件操作

字符编码
   字符编码就是字符以什么样的二进制排序存入到电脑硬盘,并按照什么样的规则读取出来并还原
   ASCII码CB2312 Unicode UTF-8
   当发现乱码,根本原因就是 存储数据的编码与读取的编码不一致
   Encoding 得到指定的编码
   FileInfo
    是一个操作文件的实例类 提供了静态File相同的方法 但是做了扩展 比如可以得到文件的大小
    当需要对同一个文件进行多次操作的时候 最好是将该文件封装到对象中操作
   FileStream
    文件流,就是通过文件流可以从硬盘将数据读取出来,或者写到硬盘上去的这样一个管道
    使用文件流读取数据的步骤:
1创建一个可以读取文件的文件流对象 FileStream fs=new FileStream(string 文件路径,FileMode文件流操作的方法)
2.准备一个字节数组 以便文件流读出来的数据存放 byte buff=new byte【1024*1024】
3.文件流对象开始读取数据并将读出的数据放入到字节数组中,注意使用文件流读出来的数据都是二进制的,所以要使用字节数组来保存
4如果读的是文本文件,使用对应的编码将字符数组转换为字符串 Encoding.DDefaultGetstring(buffer)
5.关闭文件流fs.dispose
    大文件拷贝:
文件流的Read方法 会返回一个int类型的值。表示文件流真实读取的字节数
每Read一次 读取的指针都会偏移,以便下次继续读取




   foreach背后的原理    
         1.自己写的类要被foreach 遍历就是要实现IEnumerable这个接口。
forrach背后的代码:
IEnumerator tor= lis.GetEnumerator();
while(tor.MoveNext())
{
        Console.Write(tor.Current);
}
2 GetEnumerator();这个方法 返回一个实现了IEnumerator接口对象
3.所以我们要实现IEnumerable这个接口中GetEnumerator()的话,就要写一个类来实现IEnumerator接口
并在GetEnumerator();方法中返回这个类的实例。
4.IEnumerator接口中定义一个Current只读属性 MoveNext方法  Reset()方法
5.MoveNext方法的作用 将指针向前移动一位 并判断当前位是否有元素 如果有返回true 没有就返回false
6.Current只读属性 得到当前指针指向的值
7.这两个方法都是在操作数组 而这个数组在我们的集合类中,所以我们要想办法将集合类中的数组传递到迭代器当前类中
8 迭代器对象在集合类中创建 所以可以通过构造函数让集合将他的数组传递给 迭代器,这个时候迭代器对象中应经有了数组的引用
9 实现MoveNext方法 声明index 变量 用来保存当前指针指向的数组的索引  默认-1
每调用一个这个方法 指针就向前移动一位 所以index++
判断数组[index]这个元素是否存在 index<count就存在
所以迭代器对象还需要知道元素的有效个数 通过构造函数传入
10 实现Current 只读属性 直接返回指针指向的数据 return arr[index]


    序列化
    需要将对象的状态保存起来  持久化
    序列化: 将对象的状态持久化到硬盘上
    System.Runtime.Sarialization.Formatters.Binary.BinaryFormatter
    BinaryFormatter:
Serialize(Stream,序列化的对象);将对象序列化
注意:在序列化的时候,需要序列化的对象愿意,解决这个问题只需在序列化对象的类上加上【Serializable】
是以二进制方式序列化的,而不是文本文档。
   反序列化
将之前序列化的文件还原
Deserialize(Stream);返回的是Object类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值