MemoryStream和FileStream memorystream byte

MemoryStream和FileStream

编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。
在.NET中,使用抽象基类System.IO.Stream代表流,它提供Read和Write两个方法。由于数据流的有序性,因此流对象还有一个读写指针,为此,Stream类还有一个Seek方法用于移动读写指针。
MemoryStream和FileStream memorystream byte
FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。

MemoryStream的数据来自内存中的一块连续区域,这块区域称为“缓冲区(Buffer)”。可以把缓冲区看成一个数组,每个数组元素可以存放一个字节的数据。

在创建MemoryStream对象时,可以指定缓冲区的大小,并且可以在需要的时候更改。
//字节数组
byte[]buffer = new byte[600];
//填充字节数组
privatevoid CreateExampleData()
{
for(inti=0;i<600;i++)
{
//byte类型的数最大不能超过255,用256取模实现
buffer[i] = (byte)(i%256);
}
}内存流的基本使用方法:
privatevoid OnTestMemory()
{
//创建测试数据
CreateExampleData();

//创建内存流对象,初始分配50字节的缓冲区
MemoryStream mem =new MemoryStream(50);

//向内存流中写入字节数组的所有数据
mem.Write(buffer,0,buffer.GetLength(0));

MessageBox.Show("写入数据后的内存流长度:" + mem.Length.ToString());
MessageBox.Show("分配给内存流的缓冲区大小:" + mem.Capacity.ToString());

mem.SetLength(550);

MessageBox.Show("调用SetLength方法后的内存流长度:" + mem.Length.ToString());

mem.Capacity =620;//此值不能小于Length属性
MessageBox.Show("调用Capacity方法后缓冲区大小:" + mem.Capacity.ToString());

//将读写指针移到距流开头10个字节的位置
mem.Seek(10,SeekOrigin.Begin);
MessageBox.Show(mem.ReadByte().ToString());
mem.Close();
}内存流的Length属性代表了其中存放的数据的真实长度,而Capacity属性则代表了分配给内存流的内存空间大小。
可以使用字节数组创建一个固定大小的MemoryStream,
MemoryStreammem = new MemoryStream(buffer);这时,无法再设置Capacity属性的大小。
还可以创建只读的内存流对象。
MemoryStreammem = new MemoryStream(buffer,false);
FlieStream用于存取文件。
创建文件并写入内容:
//创建一个新文件
FileStream fsForWrite =new FileStream("test.data",FileMode.Create);
try
{
//写入一个字节
fsForWrite.WriteByte(100);
CreateExampleData();
//将字节数组写入文件
fsForWrite.Write(buffer,0,buffer.GetLength(0));
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
//关闭文件
fsForWrite.Close();
}打开文件并读取内容:
privatevoid ReadFromFile()
{
FileStream fsForRead =new FileStream("test.data",FileMode.Open);
try
{
//读入一个字节
MessageBox.Show("文件的第一个字节为:"+fsForRead.ReadByte().ToString());
//读写指针移到距开头10个字节处
fsForRead.Seek(10,SeekOrigin.Begin);
byte[]bs = new byte[10];
//从文件中读取10个字节放到数组bs中
fsForRead.Read(bs,0,10);
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
fsForRead.Close();}
}如果一个程序退出了,但它打开的文件没有被关闭,将导致其他程序无法修改或删除此文件。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/277027.html

更多阅读

婚前检查项目和注意事项 精 胃镜检查前注意事项

婚前检查项目和注意事项 精——简介婚前检查是结婚前进行的体检项目,能提高人口素质、降低出生缺陷、预防先天疾病,也是夫妻彼此的一项权利,虽然新婚姻法去除了强制婚检的要求,但为了夫妻彼此的健康以及孩子的健康,应该主动进行婚检。婚

如何查询快递单号和派件员电话号码? 中通快递单号查询号码

如何查询快递单号和派件员电话号码?——简介现在电商社会,在淘宝上购买了东西,卖家已经发货也有了单号,看着旺旺上的跟踪记录就快派送到自己的手上了,但迟迟没有派送!我们该如何让快递早派送?例如:现在我们在淘宝得知有了自己的申通快递单

关于饮水:1 喝水方法和每天喝多少水合适

关于饮水:[1]喝水方法和每天喝多少水合适——简介水是生命之源,我们每天都在喝水,但是你真的知道该怎么喝水吗?每天喝多少水合适吗?今天,就来介绍一下。关于饮水:[1]喝水方法和每天喝多少水合适——方法/步骤1关于饮水:[1]喝水方法和每天喝

红米1S电信版和移动版和联通版的区别 红米1s移动版破解联通

红米1S电信版和移动版和联通版的区别——简介 直到今天,发烧级平民手机红米手机各种移动运营商制式总算全部发布起了!这也给不是IT行业的朋友选购带来了纠结,哪一版本适合自己呢?各个版本有什么全部呢?今天小编为你一一解析!希望能给你提

声明:《MemoryStream和FileStream memorystream byte》为网友树深时见影分享!如侵犯到您的合法权益请联系我们删除