💡 欢迎来到数据存储与压缩的世界!
你好,IGCSE 计算机科学的学习者们!本章将带你深入了解数据占用空间的大小,以及我们如何在不损失质量的情况下缩小数字文件(或者在某些情况下,通过接受轻微的质量损失来节省大量空间)。
理解数据存储是学习计算机科学的基础。无论你是处理大型图片、长音频文件,还是在进行网络规划,都需要学会如何衡量和管理数字文件的大小。
1. 衡量数据存储(数字层级)
在计算文件大小之前,我们需要一种衡量数据的通用语言。就像测量液体(毫升、升)或距离(米、千米)一样,数字数据也有属于自己的单位!
1.1 基本单位
位 (Bit, b)
数据的最小单位。单个二进制数字:一个 0 或一个 1。
半字节 (Nibble)
4 位的集合。(你知道吗?因为它是字节的一半,所以被命名为 Nibble!)
字节 (Byte, B)
8 位的集合。这是衡量大多数字符(如 'A'、'?' 或 '5')的基本单位。
1.2 大容量存储单位(1024 法则)
在计算机科学中,这些大容量存储单位是以 1024 而非 1000 为倍数递增的。为什么是 1024?因为 1024 是 \(2^{10}\),它是 2 的整数次幂,这与计算机处理二进制的方式完美契合。
警告:常见错误提醒!
考试大纲要求你在所有涉及大单位的计算中必须使用 1024,而不是 1000。
| 单位 | 缩写 | 大小(基于下级单位) |
|---|---|---|
| 字节 (Byte) | B | 8 位 |
| Kibibyte | KiB | 1024 Bytes |
| Mebibyte | MiB | 1024 KiB |
| Gibibyte | GiB | 1024 MiB |
| Tebibyte | TiB | 1024 GiB |
| Pebibyte | PiB | 1024 TiB |
| Exbibyte | EiB | 1024 PiB |
*请记住:在考试中,题目会使用基于 1024 的二进制前缀 (KiB, MiB, GiB)。
核心要点(第 1 部分)
数据存储以 位 (bit) 为起点。更大的单位以 1024(2 的幂)为倍数递增。在计算时务必使用 1024!
2. 计算文件大小
文件的大小完全取决于表示它需要多少二进制数据。我们将看看如何计算未压缩图像和音频文件的大小。
2.1 图像文件大小计算
要确定未压缩图像的大小,我们需要两个主要因素:分辨率 (Resolution) 和 色彩深度 (Colour Depth)。
分辨率
这是图像中 像素 (pixels) 的总数(宽 x 高)。
色彩深度
这是 用于表示每个像素颜色的位数。
- 如果图像的色彩深度为 1 位,它只能存储两种颜色 (\(2^1\)),通常是黑和白。
- 如果色彩深度为 8 位,它可以存储 256 种颜色 (\(2^8\))。
- 如果色彩深度为 24 位,它可以存储超过 1600 万种颜色 (\(2^{24}\))。
类比: 把色彩深度想象成你拥有的不同颜色的画笔数量。位数(画笔)越多,你画出的细节和种类就越丰富,但为了容纳这些色彩,图片所占空间就越大。
计算公式(图像文件大小)
$$ \text{文件大小 (位)} = \text{图像宽度 (像素)} \times \text{图像高度 (像素)} \times \text{色彩深度 (位)} $$
分步计算示例:
一张分辨率为 100 像素 x 50 像素、色彩深度为 8 位的图像。计算其以字节 (Bytes) 为单位的文件大小。
- 计算总像素: \(100 \times 50 = 5000\) 像素
- 计算总位数: \(5000 \times 8 \text{ 位/像素} = 40,000\) 位
- 转换为字节(除以 8): \(40,000 / 8 = 5000\) 字节
2.2 音频文件大小计算
声音是通过对声波进行“快照”来记录的,这个过程称为 采样 (sampling)。音质取决于采样的频率和分辨率。
采样率 (Sample Rate)
每秒采集样本的数量,单位为赫兹 (Hz)。
效果: 采样率越高(每秒快照越多),录制的声波越接近原始声音,录音的 准确度 就越高,文件大小 也随之增大。
采样分辨率 (Sample Resolution / Bit Depth)
用于存储每个样本幅度(响度)的位数。
效果: 采样分辨率越高,可存储的幅度范围越广,录音的 准确度 就越高,文件大小 也越大。
注意:你还必须考虑 音轨时长(以秒为单位),以及声音是 单声道 (Mono)(1 条音轨)还是 立体声 (Stereo)(2 条音轨)。除非特别说明,否则默认按单声道计算。
计算公式(音频文件大小)
$$ \text{文件大小 (位)} = \text{采样率 (Hz)} \times \text{采样分辨率 (位)} \times \text{时长 (秒)} $$
分步计算示例:
一段 30 秒的单声道音轨,以 44,100 Hz(采样率)和 16 位(采样分辨率)录制。计算其以 Mebibytes (MiB) 为单位的文件大小。
- 计算总位数: \(44,100 \times 16 \times 30 = 21,168,000\) 位
- 转换为字节(除以 8): \(21,168,000 / 8 = 2,646,000\) 字节
- 转换为 KiB(除以 1024): \(2,646,000 / 1024 = 2584\) KiB (约数)
- 转换为 MiB(除以 1024): \(2584 / 1024 = 2.52\) MiB (约数)
核心要点(第 2 部分)
图像和声音的质量(以及文件大小)会随着 分辨率/采样率 和 色彩/采样深度 的增加而增加。一定要记得将位转换为字节(除以 8),并在进行大单位转换时使用 1024。
3. 数据压缩
数字文件通常包含大量重复或不必要的信息。压缩技术用于减小文件大小,使存储和传输更高效。
3.1 压缩的目的与需求 (1.3.3)
我们为什么要压缩数据?
- 减少存储空间需求: 大文件在硬盘或云端占用的空间更小。
- 减少带宽需求: 数据流更小,这对在线观看视频或从互联网下载文件至关重要。
- 缩短传输时间: 小文件传输速度更快,提升了发送电子邮件或上传文件的效率。
3.2 有损压缩 (Lossy Compression, 1.3.4)
定义
有损压缩通过 永久移除被认为对人类感知不重要的数据(例如高频声音或细微的色彩变化)来减小文件大小。
文件大小缩减效果通常很显著,但原始数据 无法 被完美还原。
数据移除示例:
- 图像 (JPEG): 降低 色彩深度 或 分辨率。
- 声音 (MP3): 降低 采样率 或 采样分辨率。
- 移除人类耳/眼几乎无法察觉的极高频或极低频信号。
类比:有损压缩就像是写小说摘要。你保留了主要情节(重要数据),但丢失了确切的措辞和细节(不太重要的数据)。你无法仅通过摘要还原出整本原著。
3.3 无损压缩 (Lossless Compression, 1.3.4)
定义
无损压缩通过查找模式并以更高效的方式对数据进行编码来减小文件大小,但 不会永久移除任何数据。
原始文件可以在解压后与压缩前完全一致。文件大小的减小幅度通常比有损压缩小。
关键方法:行程长度编码 (Run Length Encoding, RLE)
RLE 是一种简单的无损压缩形式,常用于包含大量重复内容的文件(例如简单的位图图像,其中会出现长串相同颜色的像素)。
RLE 的工作原理(分步):
- RLE 不存储一长串重复的数据值,而是存储数据值以及它重复的次数(即“行程长度”)。
- 原始数据序列被替换为较短的数值对:(计数, 数值)。
RLE 示例:
想象一行像素数据如下:
未压缩时,这是 15 个数据单位。
使用 RLE 编码后:
这仅为 6 个数据单位(三组对),实现了显著的压缩!
无损压缩示例:
- 文本文件 (ZIP, RAR): 文本必须完美还原,因此必须使用无损压缩方法。
- 图像 (PNG, GIF): 用于图像质量完整性至关重要的场合。
快速复习:有损 vs. 无损
有损 (Loss-y):你会 损失 (lose) 数据。常用于图像 (JPEG) 和声音 (MP3)。最适合追求最大程度缩小体积的场景。
无损 (Loss-less):你 损失得少 (lose less)(无永久性数据丢失)。常用于归档 (ZIP) 和追求完美画质的图像 (PNG)。使用 RLE 等方法。