C# 进阶 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

内存流

  流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。

 我们在文件的读写中已经介绍了文件流,像FileStream,在这里我们再来介绍一下MemoryStream类,继承自Stream类。

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

  1. Read():读取MemoryStream流对象,将值写入缓存区。
  2. ReadByte():从MemoryStream流中读取一个字节。
  3. Write():将值从缓存区写入MemoryStream流对象。
  4. 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);
            }
    }
}