Files
test-repo/docs/zh-cn/appendix/1-computer-fundamentals/data-encoding-storage.md
T

245 lines
7.3 KiB
Markdown
Raw Normal View History

# 数据的编码、存储与传输
::: tip 🎯 核心问题
**计算机如何表示和存储各种数据?** 文字、图片、视频、声音...这些在现实世界中形态各异的信息,是如何变成 0 和 1 的?又是如何存储和传输的?本章带你理解数据的编码、存储和传输原理。
:::
---
## 0. 全景图:数据的生命周期
想象你要寄一封信给朋友:
1. **编码**:把想法变成文字(信息编码)
2. **存储**:写在纸上(数据存储)
3. **传输**:通过邮局寄出(数据传输)
计算机处理数据也是类似的过程:
| 阶段 | 做什么 | 核心问题 | 类比 |
|------|--------|---------|------|
| **编码** | 把信息变成 0 和 1 | 如何用二进制表示各种数据? | 把想法变成文字 |
| **存储** | 把数据保存起来 | 数据存在哪里?怎么组织? | 写在纸上 |
| **传输** | 把数据送到别处 | 如何可靠、高效地传输? | 邮局寄信 |
::: tip 📊 逐行解读这张表
**编码**:计算机只认识 0 和 1,所以所有数据都要"翻译"成二进制。文字用 ASCII 或 Unicode 编码,数字用二进制表示,图片用像素值,声音用采样值。
**存储**:编码后的数据需要保存起来。存储介质从快到慢有:寄存器 → 缓存 → 内存 → SSD → 硬盘 → 云存储。越快的存储越贵、容量越小。
**传输**:数据需要在不同设备间流动。传输方式有串行(一位一位传)和并行(多位同时传)。现代高速接口(USB、PCIe)多采用串行方式。
:::
---
## 1. 数据编码:用 0 和 1 表示一切
### 1.1 文本编码
<EncodingDemo />
::: tip 💡 字符编码的演变
**ASCII1963年)**
- 用 7 位二进制表示 128 个字符
- 包括英文字母、数字、常用符号
- 问题:只能表示英语,无法表示中文等
**Unicode1991年)**
- 统一编码标准,覆盖世界上所有文字
- 目前已收录超过 14 万个字符
- 常用编码方式:UTF-8(变长编码,1-4 字节)
**UTF-8 的巧妙设计**
- ASCII 字符(0-127)只用 1 字节,完全兼容
- 常用汉字用 3 字节
- 根据"前导位"判断一个字符占几个字节
:::
**常见字符编码对比:**
| 编码 | 字节数 | 支持字符 | 特点 |
|------|--------|---------|------|
| **ASCII** | 1 字节 | 128 个 | 仅英语,兼容性好 |
| **UTF-8** | 1-4 字节 | 所有文字 | 变长编码,主流标准 |
| **UTF-16** | 2-4 字节 | 所有文字 | 定长为主,Windows 常用 |
| **GBK** | 1-2 字节 | 中英文 | 中文专用,不推荐新项目使用 |
### 1.2 数字编码
::: tip 💡 整数如何用二进制表示?
**无符号整数**:直接用二进制表示
- 8 位可以表示 0-255
- 32 位可以表示 0 到约 42 亿
**有符号整数**:用补码表示
- 最高位是符号位(0 正 1 负)
- 正数:直接用二进制
- 负数:正数的二进制取反加 1
**为什么用补码?**
- 加法减法统一处理
- 0 的表示唯一
- 硬件实现简单
:::
**浮点数表示(IEEE 754 标准):**
| 部分 | 作用 | 位数(32位浮点) |
|------|------|-----------------|
| **符号位** | 正负 | 1 位 |
| **指数位** | 决定大小范围 | 8 位 |
| **尾数位** | 决定精度 | 23 位 |
### 1.3 多媒体编码
**图像编码**
- **位图**:每个像素用 RGB 值表示(红绿蓝各 8 位)
- **压缩**:JPEG(有损)、PNG(无损)
- **矢量图**:用数学公式描述形状(SVG)
**音频编码**
- **采样**:把连续声波变成离散点
- **量化**:把采样值变成数字
- **压缩**:MP3(有损)、FLAC(无损)
**视频编码**
- 视频是一帧帧图像
- 关键技术:帧间压缩(只记录变化部分)
- 常见格式:H.264、H.265、VP9
---
## 2. 数据存储:速度与容量的权衡
### 2.1 存储层次结构
<StorageDemo />
### 2.2 存储器类型
| 类型 | 原理 | 特点 | 应用 |
|------|------|------|------|
| **SRAM** | 触发器 | 极快,但昂贵 | CPU 缓存 |
| **DRAM** | 电容充放电 | 较快,需刷新 | 内存 |
| **Flash** | 浮栅晶体管 | 断电不丢失,有写入寿命 | SSD、U 盘 |
| **HDD** | 磁盘磁性记录 | 容量大,有机械延迟 | 机械硬盘 |
### 2.3 存储的关键指标
::: tip 💡 如何评估存储性能?
**访问时间**:从发出请求到获得数据的时间
- 内存:约 100 纳秒
- SSD:约 100 微秒
- HDD:约 10 毫秒
**吞吐量**:单位时间能传输的数据量
- 内存:几十 GB/s
- SSD:几 GB/s
- HDD100-200 MB/s
**IOPS**:每秒能进行的读写操作次数
- SSD:几万到几十万
- HDD:几百
:::
---
## 3. 数据传输:从串行到并行
### 3.1 传输方式
<TransmissionDemo />
### 3.2 常见接口标准
| 接口 | 类型 | 速度 | 应用 |
|------|------|------|------|
| **USB 3.0** | 串行 | 5 Gbps | 外设连接 |
| **USB 4** | 串行 | 40 Gbps | 高速外设 |
| **SATA III** | 串行 | 6 Gbps | 硬盘接口 |
| **PCIe 4.0 x16** | 串行(多通道) | 32 GB/s | 显卡、SSD |
| **以太网** | 串行 | 1-100 Gbps | 网络传输 |
### 3.3 传输的可靠性
::: tip 💡 如何保证传输不出错?
**校验机制**
- **奇偶校验**:简单的错误检测
- **CRC 校验**:更强的错误检测能力
- **校验和**:快速检测数据完整性
**纠错机制**
- **重传**:发现错误就重新发送
- **前向纠错**:发送冗余信息,接收方能自动纠正
**流量控制**
- 防止发送方发太快,接收方来不及处理
- 类似"确认收到再发下一个"
:::
---
## 4. 编码、存储、传输的协作
让我们看一个完整的例子:**保存一张照片到云端**
```
1. 编码阶段
- 相机传感器捕捉光线 → 模拟信号
- ADC 转换 → 数字信号(RAW 格式)
- JPEG 编码 → 压缩后的二进制数据
2. 存储阶段
- 写入手机内存(RAM)→ 临时存储
- 写入手机闪存(Flash)→ 持久存储
3. 传输阶段
- 读取闪存数据 → 内存
- 通过 Wi-Fi/4G 发送 → 网络传输
- 云端接收 → 写入云端存储
```
::: tip 💡 理解这个流程
每一步都涉及编码、存储、传输:
1. **编码**:把图像变成二进制数据
2. **存储**:在本地保存
3. **传输**:通过网络发送到云端
这三个环节紧密配合,才能完成"保存照片到云端"这个看似简单的操作。
:::
---
## 5. 总结:数据的三重奏
让我们用一个比喻总结编码、存储、传输:
| 概念 | 比喻 | 核心任务 |
|------|------|---------|
| **编码** | 翻译 | 把信息变成 0 和 1 |
| **存储** | 仓库 | 把数据保存起来 |
| **传输** | 快递 | 把数据送到目的地 |
::: tip 💡 核心启示
**数据处理的本质是"转换、保存、移动"**
- 编码解决"如何表示"的问题
- 存储解决"如何保存"的问题
- 传输解决"如何传递"的问题
理解了这三点,你就会明白:
- 为什么不同文件格式要选择不同的编码方式
- 为什么需要不同层次的存储介质
- 为什么传输速度和可靠性需要平衡
:::
---
## 延伸阅读
- **字符编码详解**:深入学习 ASCII、Unicode、UTF-8 的设计原理
- **存储技术发展**:了解从磁带到 SSD 的技术演进
- **网络传输协议**:学习 TCP/IP 如何保证可靠传输
- **数据压缩算法**:了解 ZIP、JPEG、MP3 等压缩原理