快速业务通道

MemoryStream与FileStream

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11

编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。

在.NET中,使用抽象基类System.IO.Stream代表流,它提供Read和Write两个方法。由于数据流的有序性,因此流对象还有一个读写指针,为此,Stream类还有一个Seek方法用于移动读写指针。

·FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。
·MemoryStream的数据来自内存中的一块连续区域,这块区域称为"缓冲区(Buffer)"。可以把缓冲区看成一个数组,每个数组元素可以存放一个字节的数据。

在创建MemoryStream对象时,可以指定缓冲区的大小,并且可以在需要的时候更改。

//字节数组
byte[] buffer = new byte[600];
//填充字节数组
private void CreateExampleData()
{
    for (int i = 0; i < 600; i++)
    {
        //byte类型的数最大不能超过255,用256取模实现
        buffer[i] = (byte)(i % 256);
    }
}


内存流的基本使用方法:

private void 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,

MemoryStream mem = new MemoryStream(buffer);
这时,无法再设置Capacity属性的大小。
还可以创建只读的内存流对象。 MemoryStream mem = 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 (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
&nb

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号