当前位置: 首页 > news >正文

C# Binary读写流 / BufferedStream缓存流 全套笔记

前置说明

所有高级文件流都必须依赖 FileStream 基础文件流,相当于:FileStream 是通道,BinaryWriter/BinaryReader/BufferedStream 是工具。

必备命名空间:using System.IO;using System.Text;


一、BinaryWriter / BinaryReader 二进制读写流(重点)

1. 核心作用

专门用于二进制格式读写文件,支持直接读写string、int、double、bool等任意数据类型,无需手动字节转换,比原生 FileStream 更简洁。

2. 核心特点

  • 读写一一对应:怎么写、怎么读(写字符串就读字符串)

  • 封装度极高,不用手动Encoding转换字节数组

  • 底层依然依赖 FileStream 通道

3. BinaryWriter 二进制写入(完整代码)

// 二进制写入流程:文件流 → 写入器 → Write写入 → 关闭释放 private void button1_Click(object sender, EventArgs e) { // 1. 创建基础文件流:无则新建、有则覆盖、只写权限 FileStream file = new FileStream(@"1.txt", FileMode.Create, FileAccess.Write); // 2. 绑定文件流,创建二进制写入工具 BinaryWriter bw = new BinaryWriter(file); // 3. 直接写入任意数据类型(无需转字节) bw.Write("世界杯中国什么时候进"); // 4. 关闭工具和文件流 bw.Close(); file.Close(); // 5. 释放资源 bw.Dispose(); file.Dispose(); }

4. BinaryReader 二进制读取(完整代码)

// 二进制读取流程:文件流 → 读取器 → 对应类型读取 → 关闭释放 private void button2_Click(object sender, EventArgs e) { // 1. 只读方式打开文件 FileStream file = new FileStream(@"1.txt", FileMode.Open, FileAccess.Read); // 2. 创建二进制读取工具 BinaryReader br = new BinaryReader(file); // 3. 对应写入类型读取(写入string就必须ReadString) string ss = br.ReadString(); this.Text = ss; // 4. 关闭释放 br.Close(); file.Close(); br.Dispose(); file.Dispose(); }

5. 必考核心规则

  • 读写类型必须严格匹配:Write(string) → ReadString(),否则报错或乱码

  • BinaryWriter 写入的文件自带二进制格式头,记事本打开是乱码,只能用 BinaryReader 正常读取

  • 必须先关外层工具(Binary),再关底层文件流(FileStream)


二、BufferedStream 缓存文件流

1. 核心原理

BufferedStream缓存缓冲流:不直接频繁读写硬盘,先把数据读写到内存缓存区,减少磁盘IO次数,大幅提升大文件读写速度

核心优势:硬盘读写慢、内存读写快,用缓存中转,优化性能。

2. 核心方法

  • Flush():强制清空缓存区,将缓存数据写入磁盘(防止数据滞留内存丢失)

  • Read():从缓存区读取数据

  • Write():写入数据到缓存区

3. BufferedStream 写入代码(注释版)

// 创建缓存流绑定文件创建通道 BufferedStream buffer = new BufferedStream(File.Create(@"1.txt")); // 字符串转字节数组 byte[] bs = Encoding.Default.GetBytes("主要把本地数据读取到缓存区里面,"); // 写入缓存区(不是直接写硬盘) buffer.Write(bs, 0, bs.Length); // 强制刷新:缓存数据落地写入硬盘 buffer.Flush(); // 关闭释放 buffer.Close();

4. BufferedStream 读取代码(循环读取完整版)

// 打开文件并绑定缓存流 BufferedStream b1 = new BufferedStream(File.OpenRead(@"1.txt")); // 根据缓存流长度创建字节数组 byte[] bs = new byte[b1.Length]; string ss = ""; // 循环读取:返回值>0 代表还有数据可读 while (b1.Read(bs, 0, bs.Length) > 0) { ss += Encoding.Default.GetString(bs); Console.WriteLine(Encoding.Default.GetString(bs)); } this.Text = ss; b1.Close();

5. 读取核心考点

  • Read()返回值 > 0:存在未读完数据,继续循环

  • Read()返回值 = 0:数据读取完毕,结束读取

  • 大文件必须循环读取,不能一次性读完


三、三种文件流核心区别(考试必考对比)

流类型

特点

适用场景

FileStream

基础字节流,手动转编码,无缓存

所有文件底层读写、小文件通用

Binary读写

支持直接读写任意数据类型,无需转字节,二进制加密存储

保存对象、数字、混合类型数据

BufferedStream

内存缓存中转,减少磁盘IO,速度快

大文件高速读写


四、全套易错点汇总

  • Binary 读写类型必须一一对应,写错读取直接报错

  • BufferedStream 写入必须调用Flush(),否则数据滞留内存、写入失败

  • 所有流必须 Close + Dispose,否则文件占用

  • Binary 保存的文件乱码是正常二进制格式,无需解码

  • 缓存流读取必须 while 循环判断返回值,防止漏读数据


五、IO流专属背诵口诀

基础File通通道,Binary读写类型套;

二进制存乱码常,对应读取才正常;

缓存Buff提速快,Flush刷新落硬盘;

所有流类必释放,读写匹配不报错。

http://www.jsqmd.com/news/1068085/

相关文章:

  • PyTorch Tensor 完全指南:从基础概念到高级操作实战
  • 微信 iPad 协议登录认证与鉴权机制深度解析
  • 己所不欲勿施于人
  • 多源BFS最短路---矩阵 | 飞地的数量 | 地图中的最高点 | 地图分析
  • C语言学习笔记20260519—如何判断输入的自然数是否为素数
  • OpencvSharp 算子学习教案之 - Cv2.DrawContours 重载1
  • 3A分子筛乙醇脱水的实验装置设计方案
  • 2026年第一、二季度最新最全热门网站建设工具全面对比评测
  • SpringCloud Alibaba Sentinel 限流+熔断完整实战教程
  • 电阻、电容、电感,二极管、三极管、mos管
  • 江科大PWM笔记:呼吸灯、舵机控制、电机调速
  • Linux 实时优化的端到端延迟:从中断到任务执行的全链路优化
  • 2026山东大学软件学院创新项目实训(团队——6)
  • 山东大学项目实训6月20日
  • 【编号317】西安城市边缘区土地利用数据
  • 计算机毕业设计之取保候审人员管理系统设计与实现
  • (一)站稳脚:用Scikit-learn跑通第一条Pipeline
  • SQL必知必会——使用游标
  • 【Springboot毕设全套源码+文档】基于springboot蛋糕店线上预订销售系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • TAP/TUN与自定义网络协议栈
  • c#软件开发学习笔记--Winform窗体第二期
  • NAT导致视频监控平台无法拉取视频流故障一例
  • 上下文窗口、KV Cache 与长上下文问题
  • Kubernetes 之资源对象 Pod详解
  • Celery 和 Apache Airflow 都可用于定时任务调度与全量数据批量分析,但定位、架构和适用场景有显著区别
  • Java 集合 - Java集合框架详解与应用
  • 毕业设计 深度学习yolo藻类细胞检测识别(科研辅助系统)(源码+论文)
  • pikachu详细通关教程
  • YOLO系列目标检测数据集大全【第四十一期】
  • 基于 Harmony 6.0 应用的乡村助农直播应用首页实现