NET中级课--文件,流,序列化1

1.对于机器的角度来看,任何文件都是二进制的0和1.

2.   :bit,一个1或0就是1位。

     字节:byte,每8位一个字节。一个字节的范围就是00000000到1111111,换成10进制就是0到255.

字节数组: 通常文件由许多字节构成,则需定义一个字节数组。

3.流:举例--将图片1.bmp从c盘复制到d盘。

       复制的程序运行在内存中,而文件在磁盘上。怎么办?实际上需要一个东西将两者连接起来,流就是这个桥梁。

  字节数组所代表的文件通过流写到内存中。 通过上述过程明确流的作用:与应用程序外部的数据进行交换(数据传输)。

           分类:文件流filestream   网络流networstream  等。

 流和字节数组:字节数组是静态容器它本身保存全部数据。而流按字节的次序进行访问可以一次访问一个字节也可以访问一段连续的字节。

4.流的应用举例:文件复制。一次性复制和分配复制两种方式。 一次性复制不适合文件较大时候使用。

//一次性复制
//通过文件流建立磁盘文件和应用程序的关系
Stream source=new FileStream(@"d:1.bmp",filemode.open,fileaccess.read);

//定义用于保存文件的字节数组  数组是定长的所以使用length属性获取流长度。
byte[] buffer=new byte[source.length];//length属性对网络流不可访问

//通过流对象上的read方法将文件以字节的方式读到buffer即字节数组中。
int bytesread=source.read(buffer,0,source.length);

//将应用程序中字节数组保存到文件
stream target=new FileStream(@"c:1.bmp",filemode.create,fileaccess.write);
target.write(buffer,0,buffer.length);
target.dispose();


//第二种方法  分批复制 
int buffersize=10240 //10k
byte[]  buffer=new byte[buffersize];
int bytesread
do
{
   bytesread=source.read(buffer,0,buffersize);
   target.write(buffer,0,bytesread);
}while (bytesread>0)//read方法返回读取到的字节数,返回0说明到了流末尾。
source.dispose();
targe.dispose();

  

原文地址:https://www.cnblogs.com/tiantianle/p/5002689.html