news 2026/4/16 18:18:03

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/16 12:07:05

Claude Code 最佳实践的 8 条黄金法则

为什么同样是调用 Claude,有的人能写出工业级代码,而有的人只是在不断堆积“技术债”? 今天分享一位拥有 7 年 Amazon、Disney 大厂经验、现任创业公司 CTO 分享的实战指南。他把 Claude Code 当作每日主力工具,并总结出了一套高阶…

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

Python_uniapp-心理咨询服务平台微信小程序的设计与实现

文章目录摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着社会节奏加快,心理健康问题日益受到关注。基于Python和Uniapp框架设计的心理咨询服务平台微信小程序&#xff0c…

作者头像 李华
网站建设 2026/4/16 11:01:36

Python_uniapp-校园订餐点餐 微信小程序多商家

文章目录PythonUniapp校园订餐点餐微信小程序(多商家版)摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!PythonUniapp校园订餐点餐微信小程序(多商家版&…

作者头像 李华
网站建设 2026/4/16 11:10:30

【奖励到账】CSDN AI 社区镜像创作激励活动第二批奖励正式发放!

家人们注意啦!CSDN AI 社区镜像创作激励活动第二批现金奖励已正式发放,CSDN再次新增开发者 “技术变现” 赛道,还没参与的你,速来 get 这份躺赢攻略,下一批奖励名单说不定就有你! 1月14日:第二…

作者头像 李华
网站建设 2026/4/8 12:29:51

python基于flask框架的校园篮球联赛信息管理系统设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 该系统基于Python Flask框架开发,设计并实现了一个校园篮球联赛信息管理平台,旨在解决传统纸质或分散式…

作者头像 李华
网站建设 2026/4/16 11:09:42

对比学习搞定乡村儿科影像诊断

📝 博客主页:Jax的CSDN主页 对比学习:破解乡村儿科影像诊断的“最后一公里”难题目录对比学习:破解乡村儿科影像诊断的“最后一公里”难题 引言:乡村儿科影像诊断的“沉默危机” 一、痛点深挖:乡村儿科影像…

作者头像 李华