相关概念:
串行化是把一些数据(例如文档的内容)转换为字节流并存储在某个地方的过程。
流:用于数据传输的对象,数据的传输有两个方向:
读取流:数据从外部源传输到程序中。
写入流:数据从程序中传输到外部源。
外部源常常是一个文件,但是也不完全都是文件,也有可能是:
使用一些网络协议读写网络上的数据,其目的是选择数据,或从另一个计算机上发送数据。
读写到指定的管道上。
把数据写到一个相应的内存区域上。
应该注意的问题:
1.DirectoryInfo类的构造函数:如:DirectoryInfo di=new Directory(@"c:windows")
如果路径表示一个不存在的对象,在构造时不会出现异常,但如果是第一次调用某些方法,但是该方法需要一个对应的文件系统对象,就会抛出一个异常。
2.通过FileInfo的DirectoryName属性可以返回父文件夹的路径。
3.File类的方法:ReadAllBytes()可以打开二进制文件,把其内容读入一个字节数组,ReadAllText()方法会在一个字符串的数组中提供指定文件的内容。
4。从性能上看,在读写文件时,输出结果会被缓存。如果程序要求读取文件流中下面的2个字节,该流会把请求传送给Windows,Windows不会连接文件系统,再定位文件,并从文件中读取2个字节,而是在一次读取的过程中,获取文件中的一个大块,把该块保存在内存区域中及缓冲区中。以后对流中数据的请求都会从该缓存区中获取,直到读完该缓冲区为止。此时,Window会从文件中再获取另一个数据块。写入文件 的方式于此相同,操作系统自动完成读写操作,但需要编写相关的流类,从其他没有保存到缓冲区的设备中读取数据。如果是这样,就应从BufferStream派生一个类,以执行缓冲操作(但BufferStream不执行缓冲操作,它是专门为程序频繁切换读数据和写数据而设计的。)
5.FileStream类的方法:ReadByte()是读取数据最简单的方式,它从流中读取一个字节,把结果转换为一个0到255之间的一个整数。如果到达该流中的末尾,则返回-1。
6。理论上FileStream类可以读取和显示文本。但是如果是用该类操作相应的文本文件,则不太容易理解。
如果知道某个文件包含文本,通常就可以用StreamReader和StreamWriter类更方便的读写,而不是FileStream。这是因为这些类的级别 比较高,特别适合于读写文本,他们执行的方法可以根据流的内容,自动检测出停止读取文本比较方便的位置,特别是:
这些类执行的方法(StreamReader.ReadLine()和StreamWriter.WriteLine())可以读写一行文本,在读写文件时,流会自动确定下一个回车符的位置,并在该处停止读取。在写入文件时,流会自动把回车符和换行符添加到文本的末尾。
使用StreamReader和StreamWriter类,就不需要担心文件中使用的编码方式了,可能的编码方式是ASCII或者基于Unicode的格式。UNICODE、UTF7、UTF8和UTF32。WIndows9X系统上文件文件总是ASCII格式,因为Windows9X不支持Unicode,但Windows NT、2000、XP、2003、Vista和Windows 2008都支持Unicode,所以文本文件除了ASCII数据外,理论上可以包含Unicode、UTF7、UTF8、UTF32数据。其约定是:如果文件是ASCII时,就只包含文本,如果是Unicode格式,就用文件的前两个或前三个字节来表示,这几个字节可以设置为表示文件 格式中的值的特定组合(称为字节码标记)。