内存流
流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。
我们在文件的读写中已经介绍了文件流,像FileStream,在这里我们再来介绍一下MemoryStream类,继承自Stream类。
MemoryStream类用于向内存而不是磁盘读写数据。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。下面列出了MemoryStream类的重要方法:
- Read():读取MemoryStream流对象,将值写入缓存区。
- ReadByte():从MemoryStream流中读取一个字节。
- Write():将值从缓存区写入MemoryStream流对象。
- WriteByte():从缓存区写入MemoytStream流对象一个字节。
using System;
using System.IO;
using System.Text;
namespace MemoryStreamApp
{
class Program
{
static void Main(string[] args)
{
//构造MemoryStream实例,并输出初始分配容量及使用大小
MemoryStream mem = new MemoryStream();
Console.WriteLine("init total size:{0}", mem.Capacity);
Console.WriteLine("init use size:{0}", mem.Length);
//将待写入的数据从字符串转换为字节数组
UnicodeEncoding encoder = new UnicodeEncoding();
byte[] bytes = encoder.GetBytes("add data");
//向内存流中写入数据
for (int i = 1; i < 4; i++)
{
Console.WriteLine("write data {0} times.", i);
mem.Write(bytes, 0, bytes.Length);
}
//写入数据后 MemoryStream 实例的容量和使用大小
Console.WriteLine("now size:{0}", mem.Capacity);
Console.WriteLine("already used size:{0}", mem.Length);
}
}
}