vs的帮助是这样写的:
MemoryStream 类创建这样的流,该流以内存而不是磁盘或网络连接作为支持存储区。MemoryStream 封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。我看不懂,请大虾们给个比较容易懂得例子让我运行一下好吗?
在线等,得到答案马上给分。
MemoryStream 类创建这样的流,该流以内存而不是磁盘或网络连接作为支持存储区。MemoryStream 封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。我看不懂,请大虾们给个比较容易懂得例子让我运行一下好吗?
在线等,得到答案马上给分。
解决方案 »
- 【紧急】win7 普通权限 vs 2012 打开项目IDE崩溃,但是管理员权限打开则正常
- 有人使用ZPL编写条码打印机程序吗?EAN128的打印如何实现?
- C# 控件问题,具体如下
- 谁知道怎么往App.config配置文件里写入吗??
- 帮忙解决连接数据库问题
- 如何在没有安装msde时自动安装之后恢复数据库,如果有时直接恢复数据库做成一个安装包?
- 马上给分50:(WinForm)这种按钮是怎么做出来的?
- 行行好!帮我解决个问题!
- 有谁能帮我黑了https://207.44.176.89/
- 请问Saucer:那个关于正则表达式的问题?
- richtextbox 无法显示
- 用dotnetbar开发的程序装在工控机上出奇的慢,怎么回事?
在.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(); }
}如果一个程序退出了,但它打开的文件没有被关闭,将导致其他程序无法修改或删除此文件。
相
你好:
感谢你为我解答,但是我还是有些疑问.
一、内存流可以与文件流关联吗?
二、既然内存流是用于对内存数据进行读写的?那么数组、变量以及对象不都是在内存当中吗?如若是这样的话那么还要内存流干嘛。直接使用数组不是更省事吗?您上面的例子我没有看出来内存流的优点阿?还望回复,谢谢。