1.文件和流是的区别:
文件是存储在存储介质上的数据集,是静态的,它具有名称和相应的路径。
当打开一个文件并对其进行读写时,该文件就成为流(stream)。
流不仅仅是指打开的磁盘文件,还可以是网络数据、控制台应用程序中的键盘输入和文本显示,甚至是内存缓存区的数据读写。
因此,流是动态的,它代表正处于输入/输出状态的数据,是一种特殊的数据结构。
1.流的基本操作
读取、写入、定位



1、长期保存数据,也不想让别人知道(其他人无法读,除了知道你的格式)
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
2、在网络上传送对象的字节序列。
当两个进程(客户端、服务器)在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

(1)BinaryFormatter类
用来把对象的值转换为字节流,以便写入磁盘文件,
位于命名空间System.Runtime.Serialization.Formatters.Binary
(2) SoapFormatter类
用来把对象的值转换为SOAP格式的数据,实现远程传输
位于命名空间System.Runtime.Serialization.Formatters.Soap中
(3)对象序列化编程的基本步骤为
首先用Serializable属性把包含数据的类标记为可序列化的类,如果不需要序列化,则使用NonSerialized来标识
然后调用BinaryFormatter或SoapFormatter的Serialize方法实现对象的序列化。反序列化时,则调用Deserialize方法。