C#使用MemoryStream类读写内存

和FileStream一样,MemoryStream和BufferedStream都派生自基类Stream,因此它们有很多共同的属性和方法,但是每一个类都有自己独特的用法。这两个类都是实现对内存进行数据读写的功能,而不是对持久性存储器进行读写。

读写内存-MemoryStream类

MemoryStream类用于向内存而不是磁盘读写数据。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。下表列出了MemoryStream类的重要方法:

1、Read():读取MemoryStream流对象,将值写入缓存区。

2、ReadByte():从MemoryStream流中读取一个字节。

3、Write():将值从缓存区写入MemoryStream流对象。

4、WriteByte():从缓存区写入MemoytStream流对象一个字节。

Read方法使用的语法如下:

 
 
 
  1. mmstream.Read(byte[] buffer,offset,count)

其中mmstream为MemoryStream类的一个流对象,3个参数中,buffer包含指定的字节数组,该数组中,从offset到(offset +count-1)之间的值由当前流中读取的字符替换。Offset是指Buffer中的字节偏移量,从此处开始读取。Count是指最多读取的字节数。Write()方法和Read()方法具有相同的参数类型。

MemoryStream类的使用实例:

 
 
 
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. class program{
  5. static void Main()
  6. {
  7. int count;
  8. byte[] byteArray;
  9. char[] charArray;
  10. UnicodeEncoding uniEncoding=new UnicodeEncoding();
  11. byte[] firstString=uniEncoding.GetBytes("努力学习");
  12. byte[] secondString=uniEncoding.GetBytes("不做C#中的菜鸟");
  13. using (MemoryStream memStream=new MemoryStream(100))
  14. {
  15. memStream.Write(firstString,0,firstString.Length);
  16. count=0;
  17. while(count
  18. {
  19. memStream.WriteByte(secondString[count++]);
  20. }
  21. Console.WriteLine("Capacity={0},Length={1},Position={2}\n",memStream.Capacity.ToString(),memStream.Length.ToString(),memStream.Position.ToString());
  22. memStream.Seek(0, SeekOrigin.Begin);
  23. byteArray=new byte[memStream.Length];
  24. count=memStream.Read(byteArray,0,20);
  25. while(count
  26. {
  27. byteArray[count++]=Convert.ToByte(memStream.ReadByte());
  28. }
  29. charArray=new char[uniEncoding.GetCharCount(byteArray,0,count)];
  30. uniEncoding.GetDecoder().GetChars(byteArray,0,count,charArray,0);
  31. Console.WriteLine(charArray);
  32. Console.ReadKey();
  33. }
  34. }
  35. }

在这个实例代码中使用了using关键字。注意:

using 关键字有两个主要用途:

1、作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。

例如:

 
 
 
  1. using System;

2、作为语句,用于定义一个范围,在此范围的末尾将释放对象。

 
 
 
  1. using(Connection conn=new Connection(connStr))
  2. {
  3. }
  4. //使用using关键字可及时销毁对象

MemoryStream.Capacity 属性 取得或设定配置给这个资料流的位元组数目。

MemoryStream.Position 属性 指定当前流的位置。

MemoryStream.Length 属性获取用字节表示的流长度。

SeekOrigin()是一个枚举类,作用设定流的一个参数。

SeekOrigin.Begin我得理解就是文件的最开始,“0”是偏移,表示跳过0个字节。写2就是跳过2个字节。

MemoryStream类通过字节读写数据。本例中定义了写入的字节数组,为了更好的说明Write和WriteByte的异同,在代码中声明了两个byte数组,其中一个数组写入时调用Write方法,通过指定该方法的三个参数实现如何写入。

另一个数组调用了WriteByte方法,每次写入一个字节,所以采用while循环来完成全部字节的写入。写入MemoryStream后,可以检索该流的容量,实际长度,当前流的位置,将这些值输出到控制台。通过观察结果,可以确定写入MemoryStream流是否成功。

调用Read和ReadByte两种方法读取MemoryStream流中的数据,并将其进行Unicode编码后输出到控制台。

当前名称:C#使用MemoryStream类读写内存
当前URL:http://www.shufengxianlan.com/qtweb/news40/375090.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联