news 2026/4/23 12:45:23

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/4/23 9:29:07

2026年,我们如何用AI提前看见未来?脉脉「脉向AI」带来新思考

💡 核心观点:在AI时代,真正的安全感不来自固守已有技能,而来自持续预判未来的能力。先一步看见未来的人,将掌握职业发展的主动权。 目录 🌊 引言:站在AI浪潮的临界点上 📊 一组扎心…

作者头像 李华
网站建设 2026/4/23 9:57:35

Python_uniapp-校园商店商城购物小程序

文章目录Python_uniapp-校园商店商城购物小程序的摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!Python_uniapp-校园商店商城购物小程序的摘要 校园商店商城购物小程序基于Python后端和Uniap…

作者头像 李华
网站建设 2026/4/18 8:54:14

Python_uniapp-鲜花商城销售系统 微信小程序

文章目录摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 Python_uniapp-鲜花商城销售系统微信小程序是一个基于Python后端和Uniapp前端框架开发的综合性电商平台,专注于鲜花在…

作者头像 李华
网站建设 2026/4/23 9:31:02

为什么同内容的两个目录,ls和du显示的大小不一样?

前言:在进行目录迁移时,很容易遇到一个有趣的现象:明明是内容完全一致的两个目录,用ls/ll查看目录本身的大小时,数值并不相同;但用du -sh统计目录下文件的总大小,结果却完全一致。这背后藏着“目…

作者头像 李华