news 2026/5/7 15:49:06

3.6 MemoryStream

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3.6 MemoryStream

1.MemoryStream简介

2.MemoryStream常用方法和属性


1.MemoryStream简介

MemoryStream是C#中System.IO 命名空间下的一个类,它将数据存储在内存中,而非磁盘文件,因此读写速度极快,适合临 时处理小量数据(如序列化/反序列化、网络数据中转、内存中操作字节数组等)简单来说:a.普通FileStream操作的是磁盘文件,MemoryStream操作的是内存中的字节数组 b.用完后需及时释放内存(通过using语句自动释放)

2.MemoryStream常用方法和属性

1).核心属性 a.Position 当前流的读写位置(必须重置到0才能读取刚写入的数据,否则从末尾开始读)b.Length 流中存储的字节总数 c.Capacity 流的内存容量(可自动扩容,也可手动指定)
2).核心方法 a.Write(byte[]buffer,intoffset,intcount)将字节数组写入流(offset 是起始索引,count是写入长度)b.Read(byte[]buffer,intoffset,intcount)从流读取字节到数组(返回实际读取的字节数)c.ToArray()将流中所有数据转为字节数组 d.GetBuffer()获取流的底层字节数组(包含未使用的容量)e.Flush()清空流缓冲区(MemoryStream中无实际作用,仅为实现抽象类)f.Close()/Dispose()释放资源(using语句会自动调用)


usingSystem;usingSystem.IO;usingSystem.Text;classMemoryStreamDemo{staticvoidMain(){// 1. 基础用法:写入字符串到 MemoryStream,再读取出来// 定义要写入的字符串stringoriginalText="Hello, MemoryStream!";// 将字符串转为字节数组(指定编码,避免乱码)byte[]inputBytes=Encoding.UTF8.GetBytes(originalText);// using 语句自动释放资源(关键:避免内存泄漏)using(MemoryStreamms=newMemoryStream()){// 2. 写入字节数组到 MemoryStreamms.Write(inputBytes,0,inputBytes.Length);// 3. 重置流的位置到起始处(否则读取时会从末尾开始,读不到数据)ms.Position=0;// 4. 从 MemoryStream 读取数据到新的字节数组byte[]outputBytes=newbyte[ms.Length];intbytesRead=ms.Read(outputBytes,0,outputBytes.Length);// 5. 将字节数组转回字符串stringreadText=Encoding.UTF8.GetString(outputBytes,0,bytesRead);Console.WriteLine("读取到的内容:"+readText);// 输出:Hello, MemoryStream!// 6. 快捷获取 MemoryStream 中的所有字节(替代手动读取)byte[]allBytes=ms.ToArray();Console.WriteLine("字节数组长度:"+allBytes.Length);// 输出:20(对应字符串的UTF8字节数)}// 7. 进阶:初始化时传入字节数组(只读/可写)byte[]initBytes=Encoding.UTF8.GetBytes("初始化的字节数组");// 创建基于现有字节数组的 MemoryStream(可写)using(MemoryStreamms2=newMemoryStream(initBytes)){// 追加写入数据byte[]appendBytes=Encoding.UTF8.GetBytes(" - 追加内容");ms2.Write(appendBytes,0,appendBytes.Length);// 重置位置后读取全部ms2.Position=0;stringfullText=newStreamReader(ms2).ReadToEnd();Console.WriteLine("追加后的内容:"+fullText);// 输出:初始化的字节数组 - 追加内容}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 6:43:03

通信原理篇---多径效应

我们用“回声听不清说话”这个生活场景,来彻底讲懂多径效应。核心比喻:在山谷里喊话想象一下,你站在一个 有很多高大建筑物的山谷(或一个大厅) 里,对着远处的朋友喊一句话:“我们几点吃饭&#…

作者头像 李华
网站建设 2026/5/2 9:41:54

探索三相PWM整流器的双闭环控制实现

三相PWM整流器,采用双闭环控制,用C语言实现PI控制,SVPWM等模块。在电力电子领域,三相PWM整流器因其能够实现能量双向流动、单位功率因数运行等优点,应用愈发广泛。今天咱们就聊聊基于双闭环控制,并用C语言实…

作者头像 李华
网站建设 2026/5/4 10:44:39

基于MATLAB/Simulink的移相变压器仿真模型探索:Phase_Shift_T

Phase_Shift_T:基于MATLAB/Simulink的移相变压器仿真模型,可实现-25、-15……25的移相。 变压器副边实现36脉波不控整流,变压器网侧电压、阈侧电压以及移相角度可直接设置。 仿真条件:MATLAB/Simulink R2015b最近在研究电力系统相…

作者头像 李华
网站建设 2026/5/3 4:07:12

ACO-KELM回归预测MATLAB代码:基于电厂运行数据的优化与实现

ACO蚁群算法优化KELM核极限学习机(ACO-KELM)回归预测MATLAB代码 代码注释清楚。 main为主程序,可以读取EXCEL数据。 很方便,容易上手。 (电厂运行数据为例)老铁们今天带大家玩点硬核的——用蚂蚁找食物的…

作者头像 李华