`
fastwind
  • 浏览: 319066 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

内存流MemoryStream

阅读更多

编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。
在.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
{
//关闭文件
fsForWrite.Close();
}打开文件并读取内容:
private void 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(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
fsForRead.Close(); }
}如果一个程序退出了,但它打开的文件没有被关闭,将导致其他程序无法修改或删除此文件。

分享到:
评论

相关推荐

    XmlReader 读取器读取内存流 MemoryStream 的注意事项

    XmlReader 读取器读取内存流 MemoryStream 的注意事项

    C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换

    本文主要介绍字符串string和内存流MemoryStream及比特数组byte[]之间相互转换的方法,需要的小伙伴可以参考一下。

    FileStream MemoryStream 内存流 文件流 生成客户端

    FileStream MemoryStream 内存流 文件流 生成客户端 FileStream MemoryStream 内存流 文件流 生成客户端

    C++内存流CMemoryStream

    C++内存流CMemoryStream,利用内存池提高内存分配效率和速度

    node-memorystream:这是 node.js 的轻量级内存流模块

    介绍 node-memorystream - 该模块允许在内存中创建流。 它可用于模拟文件流、过滤/改变一个流和另一个流之间的数据、缓冲传入数据、作为...一些如何使用内存流模块的示例。 基本输入/输出操作 在这个例子中,我说明了内

    C#编写的录音机程序(支持通过MemoryStream播放Wav格式流文件)

    使用C#编写的录音机程序,通过NAudio实现对本机播放声音的录制播放功能。 程序可以录制本机输出的音频信息,并能通过文件、MemoryStream内存流两种方式对录制的音频进行播放。

    memorystream

    有关内存流的示例 内存流的一些基本应用及其语法还有调试

    文件转存内存和内存读取文件和文件读写流很详细....

    文件读进内存,存储成内存块,从内存块读取数据重新生成文件。 文件流读取和写入...很详细..

    mem-stream:创建内存信息流

    内存流 创建一个可读的内存信息流。 例子 var MemoryStream = require ( 'mem-stream' ) ; var memStream = new MemoryStream ( { sep : '\n' , interval : 500 , dataType : 'osFreeMem' } ) ; memStream . ...

    C# 文件处理技术

    3-8-1 读写内存流——MemoryStream类 40 3-8-2 MemoryStream类案例学习 41 3-8-3 读写缓存流——BufferedStream类 43 3-9 读写缓存流 ——BufferedStream类 43 3-9-1 读写缓存流 ——BufferedStream类 43 3-9-2 ...

    SmallBlockMemoryStream:避免使用大对象堆的 MemoryStream 替换

    小块内存流 该程序集公开了一个类SmallBlockMemoryStream ,该类旨在替代 BCL 类。 在为 、和进行性能调优的大容量、高可用性市场数据服务的同时, 发现了对此类的需求。 这些服务通常会返回非常大的响应消息,并且...

    des加密C#.

    主要用到C#提供的以下三个类: MemoryStream 内存流 DESCryptoServiceProvider 加密服务提供者类 CryptoStream 讲数据流连接到加密转换的流

    QR二维码的组件的(C#)

    //生成内存流对象 image.Save(MStream, System.Drawing.Imaging.ImageFormat.Gif);//图片转化为内存流 Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(MStream.ToArray()...

    C#面向对象继承-文件类

    C#面向对象编程基础文件类的PPT文件Path:对文件或目录的路径进行操作(很方便) ...FileStream:文件流,MemoryStream内存流;NetworkStream网络流 StreamReader: 快速读取文本文件 StreamWriter:快速写入文本文件

    QuickMemoryStream

    自己封装的C++内存流,使用它,您只需要要关注如何读写内存,而完全不用了解内存的分配过程。内部附有实例,一看便会!

    WpfApp.rar

    MemoryStream ms = new MemoryStream(); Package package = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite); Uri DocumentUri = new Uri("pack://InMemoryDocument.xps"); PackageStore.Remove...

    C#读写文本文件的方法

    本文实例讲述了C#读写...System.IO.MemoryStream允许将内存块作为流进行访问 以下为读写文件的示例 先引用命名空间 using System.IO; 以下是源代码 namespace 文本文件打开测试 { public partial class Form1 : Form

    密码加密工具

    //实例化内存流 //将数据流链接到加密转换的流 CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, ...

Global site tag (gtag.js) - Google Analytics