0

0

C# 内存流使用方法 C#如何使用MemoryStream

煙雲

煙雲

发布时间:2026-02-16 11:04:03

|

703人浏览过

|

来源于php中文网

原创

memorystream 用于将内存当作临时“文件”进行小到中等数据的读写操作,如序列化、http响应处理、生成excel/pdf等;不适用于大文件或长期缓存,因其不持久、非线程安全、需手动管理资源。

c# 内存流使用方法 c#如何使用memorystream

MemoryStream 用来干啥?不是所有场景都适合

MemoryStream 是把内存当“文件”用的流,适合小到中等数据的临时读写——比如序列化对象、拼接字节数组、处理 HTTP 响应体、生成 Excel/PDF 内存流。它不持久、不线程安全(默认)、不自动释放资源,拿它读 GB 级文件或长期持有引用,容易触发 OutOfMemoryException 或内存泄漏。

常见误用:用 MemoryStream 缓存 Web API 的大文件响应后直接返回给前端(该用 FileStream 或流式传输);或在 ASP.NET Core 中把 MemoryStream 存进静态集合长期持有。

创建和写入 MemoryStream 的三种典型方式

关键点:是否预分配容量、是否允许扩展、写完要不要重置位置。

95Shop仿醉品商城
95Shop仿醉品商城

95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we

下载
  • 空构造函数 new MemoryStream():内部缓冲区动态增长,但频繁扩容有性能开销;写完要调 stream.Position = 0 才能读
  • 带容量的构造函数 new MemoryStream(int capacity):预分配缓冲区,避免多次 realloc;容量只是初始值,仍可自动扩展
  • 传入字节数组 new MemoryStream(byte[] buffer):创建的是“可读写视图”,修改会影响原数组;若只读,用 new MemoryStream(byte[], false) 防误写
byte[] data = Encoding.UTF8.GetBytes("hello");
using var stream = new MemoryStream(data, writable: false); // 只读视图
// stream.Write(...) 会抛 NotSupportedException

读取时 Position 和 GetBuffer 的坑

Position 是当前读/写偏移,Length 是实际数据长度,Capacity 是已分配缓冲区大小——三者常不相等。尤其注意 GetBuffer() 返回的是整个底层数组,不是有效数据部分。

  • 读取全部内容推荐用 ToArray()(安全、返回精确字节),不是 GetBuffer()
  • GetBuffer() 只在你明确需要复用缓冲区且知道 Length 边界时才用,否则可能读到脏数据
  • 写入后没调 Position = 0 就读,会得到空结果(因为指针在末尾)
using var stream = new MemoryStream();
stream.Write(Encoding.UTF8.GetBytes("test"));
Console.WriteLine(stream.Length);     // 输出 4
Console.WriteLine(stream.GetBuffer().Length); // 可能是 256 或更大(内部扩容后的容量)
Console.WriteLine(stream.ToArray().Length);   // 稳定输出 4

配合 BinaryWriter / BinaryReader 或序列化使用

MemoryStream 经常作为二进制序列化的载体,但要注意编码一致性与生命周期管理。

  • BinaryWriter 写完别忘了 Flush()(虽然 Dispose 也会刷,但显式更清晰)
  • 反序列化时,确保 MemoryStream.Position == 0,否则 BinaryReader 从中间开始读会失败
  • JSON.NET 或 System.Text.Json 序列化到 MemoryStream 时,记得用 Utf8JsonWriter 直接写入,避免中间转 string 造成额外 GC

真正容易被忽略的是:在异步方法里用 MemoryStream,别把它传给多个并发任务共享操作——没有内置锁,Position 竞态会导致读写错乱。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

441

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

321

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

750

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

750

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

568

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

234

2025.08.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.8万人学习

C# 教程
C# 教程

共94课时 | 9.6万人学习

C 教程
C 教程

共75课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号