当前位置: 首页 > 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.gsyq.cn/news/1580041.html

相关文章:

  • 多源BFS最短路---矩阵 | 飞地的数量 | 地图中的最高点 | 地图分析
  • C语言学习笔记20260519—如何判断输入的自然数是否为素数
  • 己所不欲勿施于人
  • 江科大PWM笔记:呼吸灯、舵机控制、电机调速
  • 山东大学项目实训6月20日
  • (一)站稳脚:用Scikit-learn跑通第一条Pipeline
  • 计算机毕业设计之取保候审人员管理系统设计与实现
  • 【编号317】西安城市边缘区土地利用数据
  • c#软件开发学习笔记--Winform窗体第二期
  • 【Springboot毕设全套源码+文档】基于springboot蛋糕店线上预订销售系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • TAP/TUN与自定义网络协议栈
  • 上下文窗口、KV Cache 与长上下文问题
  • 视频协议传输全解析:从 HTTP/HTTPS 到 HLS/DASH 的完整旅程
  • 继电器项目
  • 后端常见问题
  • Java 集合 - 用好 SortedMap 和 NavigableMap,优化 Java 集合排序与操作效率
  • 震动感应灯
  • RAG 系统化学习教程(含查询改写、混合检索、重排序、上下文增强与评估闭环)
  • 告别重复操作!OpenClaw 2.7.9 电脑自动化完整落地实操
  • 腾讯犀牛鸟开源计划启动!一行命令部署 OpenTenBase,速通 issue 拿面试绿通
  • LLM运行机制
  • AI+仿真构建交互式电力工程教学框架:从原理到实践
  • 大语言模型推理优化:从思维链到潜在状态轨迹的范式跃迁
  • 多集群管理
  • 51单片机音乐盒
  • 线性合约与标准合约选择及支付机制优化实战指南
  • MATRIX框架:基于双通道约束奇偶校验的多层代码水印技术实践
  • 接口幂等性设计与实现
  • 联邦学习在3D物体检测中的应用:Fed3D框架解析与实践
  • 动态列生成在双目标切割问题中的优化应用