news 2026/5/7 18:23:34

3.8 BufferedStream

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3.8 BufferedStream

1.BufferedStream简介

2.BufferedStream示例


1.BufferedStream简介

BufferedStream是C# System.IO命名空间下的一个流包装类,它的核心作用是在内存中创建缓冲区,减少对磁盘的操作次数 从而提升IO性能 通俗比喻:直接读写底层流(比如磁盘文件)就像直接用手接水龙头的水,每次接一点点,要接很多次;而BufferedStream相当于先拿一 个杯子(缓冲区)接水,接满后再一次性倒到目标容器里,大大减少了操作次数(IO操作是耗时的物理操作,减少次数就能提升 性能)
:a.默认缓冲区的大小是4096字节 b.如果底层流本身已有缓冲(如FileStream默认开启缓冲),使用BufferedStream可能无法提升性能

2.BufferedStream示例

usingSystem;usingSystem.IO;usingSystem.Text;classBufferedStreamWriteDemo{staticvoidMain(){// 文件路径(可替换为你自己的路径)stringfilePath="test_buffered.txt";// 要写入的测试数据(模拟多次小批量写入)stringcontent="这是测试BufferedStream的内容,用于演示缓冲写入的效果。\n";byte[]data=Encoding.UTF8.GetBytes(content);// 使用using语句自动释放流资源(关键!避免内存泄漏和数据丢失)using(FileStreamfileStream=newFileStream(filePath,FileMode.Create,FileAccess.Write))// 包装FileStream,创建BufferedStream,自定义缓冲区大小为8192字节(8KB)using(BufferedStreambufferedStream=newBufferedStream(fileStream,8192)){// 模拟10次小批量写入(如果直接写FileStream,会触发10次磁盘IO;用缓冲流只会在缓冲区满/Flush/关闭时触发)for(inti=0;i<10;i++){// 写入数据到缓冲区(此时并未立即写入磁盘)bufferedStream.Write(data,0,data.Length);Console.WriteLine($"第{i+1}次写入缓冲区完成");}// 强制将缓冲区剩余数据写入底层流(可选,using结束时会自动Flush,但显式调用更安全)bufferedStream.Flush();Console.WriteLine("所有数据已写入文件");}Console.WriteLine("写入完成,按任意键退出...");Console.ReadKey();}}

usingSystem;usingSystem.IO;usingSystem.Text;classBufferedStreamReadDemo{staticvoidMain(){stringfilePath="test_buffered.txt";// 确保文件存在(复用上面写入的文件)if(!File.Exists(filePath)){Console.WriteLine("文件不存在,请先运行写入示例!");return;}using(FileStreamfileStream=newFileStream(filePath,FileMode.Open,FileAccess.Read))using(BufferedStreambufferedStream=newBufferedStream(fileStream)){// 定义读取缓冲区(每次读取1024字节)byte[]readBuffer=newbyte[1024];intbytesRead;StringBuilderresult=newStringBuilder();// 循环读取,直到返回0(表示流结束)while((bytesRead=bufferedStream.Read(readBuffer,0,readBuffer.Length))>0){// 将读取的字节转换为字符串stringchunk=Encoding.UTF8.GetString(readBuffer,0,bytesRead);result.Append(chunk);}// 输出读取结果Console.WriteLine("读取到的文件内容:");Console.WriteLine(result.ToString());}Console.WriteLine("读取完成,按任意键退出...");Console.ReadKey();}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 22:41:46

PETRV2-BEV模型功能全测评:在nuscenes数据集上的真实表现

PETRV2-BEV模型功能全测评&#xff1a;在nuscenes数据集上的真实表现 随着自动驾驶技术的快速发展&#xff0c;基于纯视觉的3D目标检测方案因其成本优势和语义丰富性受到广泛关注。其中&#xff0c;BEV&#xff08;Birds-Eye-View&#xff09;感知范式通过将多视角图像特征转换…

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

5分钟部署Qwen3-Reranker-4B:vLLM+Gradio实现文本重排序

5分钟部署Qwen3-Reranker-4B&#xff1a;vLLMGradio实现文本重排序 1. 引言 在现代信息检索系统中&#xff0c;重排序&#xff08;Re-ranking&#xff09;是提升搜索结果相关性的关键环节。传统的检索模型如BM25能够快速召回候选文档&#xff0c;但往往缺乏语义理解能力。而基…

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

Hunyuan-MT-7B-WEBUI对比其他翻译工具,优势在哪?

Hunyuan-MT-7B-WEBUI对比其他翻译工具&#xff0c;优势在哪&#xff1f; 1. 引言&#xff1a;翻译工具的“可用性鸿沟” 在多语言信息爆炸的时代&#xff0c;高质量、低门槛的翻译能力已成为技术落地的关键基础设施。然而&#xff0c;一个长期存在的矛盾是&#xff1a;顶尖的…

作者头像 李华
网站建设 2026/5/7 15:44:06

ESP32教程从零实现:呼吸灯PWM控制实战

从零开始玩转ESP32&#xff1a;用PWM实现呼吸灯&#xff0c;点亮你的第一盏智能LED你有没有想过&#xff0c;手机通知灯是怎么“缓缓亮起又慢慢熄灭”的&#xff1f;那种柔和的明暗变化&#xff0c;像呼吸一样有节奏&#xff0c;背后其实藏着一个非常经典的技术——PWM&#xf…

作者头像 李华
网站建设 2026/5/7 12:18:14

从零实现Arduino IDE中文显示:Windows专属教程

让Arduino IDE说中文&#xff1a;Windows平台实战汉化指南 你是不是也曾在打开Arduino IDE时&#xff0c;面对满屏英文菜单感到无从下手&#xff1f;“File”、“Sketch”、“Upload”这些词对编程老手来说稀松平常&#xff0c;但对刚接触嵌入式开发的新手、中小学生或非计算机…

作者头像 李华
网站建设 2026/5/5 19:15:37

DeepSeek-R1社区版和官方版有什么区别?部署评测

DeepSeek-R1社区版和官方版有什么区别&#xff1f;部署评测 1. 背景与选型动机 随着大模型在推理、代码生成等任务中的广泛应用&#xff0c;对轻量化、本地化部署的需求日益增长。DeepSeek-R1 作为具备强大逻辑推理能力的闭源模型&#xff0c;在多项基准测试中表现出色。然而…

作者头像 李华