2026-02-15 01:57:52 +08:00
|
|
|
|
# 数据的编码、存储与传输
|
|
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
::: tip 🎯 核心问题
|
|
|
|
|
|
**计算机如何表示和存储各种数据?** 文字、图片、视频、声音...这些在现实世界中形态各异的信息,是如何变成 0 和 1 的?又是如何存储和传输的?本章带你理解数据的编码、存储和传输原理。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 0. 全景图:数据的生命周期
|
|
|
|
|
|
|
|
|
|
|
|
想象你要寄一封信给朋友:
|
|
|
|
|
|
|
|
|
|
|
|
1. **编码**:把想法变成文字(信息编码)
|
|
|
|
|
|
2. **存储**:写在纸上(数据存储)
|
|
|
|
|
|
3. **传输**:通过邮局寄出(数据传输)
|
|
|
|
|
|
|
|
|
|
|
|
计算机处理数据也是类似的过程:
|
|
|
|
|
|
|
|
|
|
|
|
| 阶段 | 做什么 | 核心问题 | 类比 |
|
|
|
|
|
|
|------|--------|---------|------|
|
|
|
|
|
|
| **编码** | 把信息变成 0 和 1 | 如何用二进制表示各种数据? | 把想法变成文字 |
|
|
|
|
|
|
| **存储** | 把数据保存起来 | 数据存在哪里?怎么组织? | 写在纸上 |
|
|
|
|
|
|
| **传输** | 把数据送到别处 | 如何可靠、高效地传输? | 邮局寄信 |
|
|
|
|
|
|
|
|
|
|
|
|
::: tip 📊 逐行解读这张表
|
|
|
|
|
|
**编码**:计算机只认识 0 和 1,所以所有数据都要"翻译"成二进制。文字用 ASCII 或 Unicode 编码,数字用二进制表示,图片用像素值,声音用采样值。
|
|
|
|
|
|
|
|
|
|
|
|
**存储**:编码后的数据需要保存起来。存储介质从快到慢有:寄存器 → 缓存 → 内存 → SSD → 硬盘 → 云存储。越快的存储越贵、容量越小。
|
|
|
|
|
|
|
|
|
|
|
|
**传输**:数据需要在不同设备间流动。传输方式有串行(一位一位传)和并行(多位同时传)。现代高速接口(USB、PCIe)多采用串行方式。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 数据编码:用 0 和 1 表示一切
|
|
|
|
|
|
|
|
|
|
|
|
### 1.1 文本编码
|
|
|
|
|
|
|
|
|
|
|
|
<EncodingDemo />
|
|
|
|
|
|
|
|
|
|
|
|
::: tip 💡 字符编码的演变
|
|
|
|
|
|
**ASCII(1963年)**:
|
|
|
|
|
|
- 用 7 位二进制表示 128 个字符
|
|
|
|
|
|
- 包括英文字母、数字、常用符号
|
|
|
|
|
|
- 问题:只能表示英语,无法表示中文等
|
|
|
|
|
|
|
|
|
|
|
|
**Unicode(1991年)**:
|
|
|
|
|
|
- 统一编码标准,覆盖世界上所有文字
|
|
|
|
|
|
- 目前已收录超过 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
|
|
|
|
|
|
- HDD:100-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 等压缩原理
|