AI总结课上知识生成
📌 一、JSON序列化(数据交换核心)
概念本质
JSON = 对象翻译器
把内存中的对象变成文本(序列化),把文本变回对象(反序列化)。就像把3D模型拍照(变平面),看照片又能还原模型。
核心要点
-
序列化:对象 → JSON字符串(用于存储/传输)
-
反序列化:JSON字符串 → 对象(用于读取/使用)
-
Newtonsoft.Json:最常用的第三方库
-
强类型:序列化什么类型,反序列化就要什么类型
使用场景
✓ 配置文件 ✓ API通信 ✓ 数据存储 ✓ 跨语言数据交换
代码记忆点
csharp
// 序列化:SerializeObject
string json = JsonConvert.SerializeObject(对象);
// 反序列化:DeserializeObject
对象 = JsonConvert.DeserializeObject<类型>(json);
📌 二、缓冲流(BufferedStream - 性能加速器)
概念本质
缓冲流 = 快递集散中心
不一件件发货(直接写磁盘),而是攒一批一起发(先存内存缓冲区)。大幅减少快递次数(磁盘IO),提升效率。
核心原理
-
缓冲区:内存中的临时存储区(默认4KB)
-
批量操作:攒够数据或主动刷新时才写磁盘
-
包装器:需要包装其他流(如FileStream)使用
性能对比
| 场景 | 无缓冲 | 有缓冲 |
|---|---|---|
| 写1000行日志 | 1000次磁盘访问 | 约20次磁盘访问 |
| 速度 | 慢 | 快5-50倍 |
使用场景
✓ 频繁小文件读写 ✓ 日志记录 ✓ 网络流处理 ✓ 大文件顺序读写
代码记忆点
csharp
using (var buffered = new BufferedStream(File.Create("文件")))
{
// 写入数据(先到缓冲区)
buffered.Write(数据);
buffered.Flush(); // 手动刷新到磁盘
}
📌 三、文件夹操作(文件管理系统)
概念本质
Directory类 = 仓库管理员
不关心仓库里具体货物(文件内容),只管仓库本身(创建、删除、查找仓库)。
两类操作
-
目录管理:创建、删除、移动、检查目录
-
内容查询:获取文件列表、子目录列表
核心方法分类
-
存在性检查 :
Directory.Exists(路径) -
创建删除 :
CreateDirectory()、Delete(路径, true递归删除) -
路径获取 :
GetCurrentDirectory()当前目录 -
内容遍历 :
GetFiles()获取文件、GetDirectories()获取子目录 -
移动重命名 :
Move(原路径, 新路径)
路径类型
text
./ 当前目录
../ 上级目录
../../ 上两级目录
C:\ 绝对路径(Windows)
/var 绝对路径(Linux)
使用场景
✓ 应用数据目录管理 ✓ 批量文件处理 ✓ 临时文件清理 ✓ 备份恢复
代码记忆点
csharp
// 检查 → 创建 → 操作
if (!Directory.Exists(路径))
Directory.CreateDirectory(路径);
// 获取所有txt文件
string[] 文件数组 = Directory.GetFiles(文件夹, "*.txt");
🔄 四、三者配合工作流
标准数据处理流程
text
原始对象
↓ JSON序列化(变成字符串)
JSON字符串
↓ 缓冲流写入(高效存磁盘)
磁盘文件
↓ 文件夹管理(组织存放位置)
归档完成
逆向读取流程
text
磁盘文件位置
↓ 文件夹操作找到文件
文件路径
↓ 缓冲流读取(高效加载)
JSON字符串
↓ JSON反序列化(变回对象)
可用对象
黄金组合示例
csharp
// 保存数据:对象 → JSON → 缓冲写入 → 文件夹
string json = JsonConvert.SerializeObject(数据);
string 路径 = Path.Combine(文件夹, "data.json");
using (var 缓冲流 = new BufferedStream(File.Create(路径)))
{
缓冲流.Write(Encoding.UTF8.GetBytes(json));
}
// 读取数据:文件夹 → 缓冲读取 → JSON → 对象
using (var 缓冲流 = new BufferedStream(File.OpenRead(路径)))
{
byte[] 数据 = new byte[缓冲流.Length];
缓冲流.Read(数据, 0, 数据.Length);
string json = Encoding.UTF8.GetString(数据);
return JsonConvert.DeserializeObject<类型>(json);
}
🎯 五、快速选择指南
什么时候用什么?
| 你的需求 | 首选技术 | 原因 |
|---|---|---|
| 存对象配置 | JSON序列化 | 可读、易改、标准 |
| 高性能读写 | 缓冲流 | 减少IO,速度快 |
| 管理多个文件 | 文件夹操作 | 批量处理、组织 |
| 大文件处理 | 缓冲流 + 分段读写 | 内存友好 |
| 临时数据 | MemoryStream | 纯内存,最快 |
| 简单文本 | File.WriteAllText | 代码最少 |
常见错误预防
-
JSON类型不匹配:写入和读取的类型必须一致
-
文件未关闭 :始终用
using或手动Close() -
路径错误 :用
Path.Combine()代替字符串拼接 -
权限问题:检查文件夹读写权限
-
缓冲区大小:4KB够用,大文件可调大
💡 六、一句话记忆法
-
JSON:对象 ↔ 文本翻译器(序列化/反序列化)
-
缓冲流:快递集散中心(攒一批,发一次)
-
文件夹操作:仓库管理员(只管位置,不管内容)
📋 七、检查清单(使用前快速核对)
JSON操作检查
-
引用了Newtonsoft.Json包
-
序列化和反序列化类型匹配
-
处理了null值和异常
-
中文用了UTF8编码
缓冲流检查
-
用了using确保关闭
-
重要数据调用了Flush()
-
缓冲区大小合适(默认4KB)
-
包装了正确的底层流
文件夹检查
-
路径用Path.Combine()生成
-
操作前检查Exists()
-
删除前确认无重要数据
-
考虑了跨平台路径差异
🔧 八、应急解决方案
遇到问题先检查
-
文件找不到 → 检查路径,用绝对路径调试
-
权限拒绝 → 以管理员运行,检查文件夹权限
-
内存不足 → 改缓冲流为分段读写
-
中文乱码 → 统一使用Encoding.UTF8
-
JSON解析失败 → 检查JSON格式,用在线验证器
最后记住:
-
JSON管内容(数据是什么)
-
缓冲流管效率(怎么读写快)
-
文件夹管位置(东西放哪里)
三者各司其职,配合使用,就能构建稳健的数据处理系统。保存这份手册,需要时快速查阅!