这文章记录一些关于计算机的知识,我觉得程序员应该可以看看,大部分都是抽象,我们在写代码或者在做程序的时候,不用在乎底层知识,我们只需要写,编译器会帮我们处理成想要的样子,我觉得硬件底层是很复杂的一个东西,它不仅仅是编程的逻辑判断,还有物理知识,电的知识,这篇文章是一个个抽象来理解计算机,所以我们不用关心底层什么 ALU,或者 计算等等。
这篇文章不只是记录,也写包括我的理解,可能不是很对,有错误请给提 issues。
感谢CrashCourse 字幕组 以及 Crash Course 你们很棒.
文本文件,音乐文件,照片和视频,今天我们要讨论文件到底是什么?以及计算机怎么管理文件
文件格式:如何编码文字,声音,图片,.txt .wav.bmp。
这些格式虽然管用,而且现在还在用,但它们的简单性意味着效率不高。
我们希望文件能小一点,这样能存大量文件,传输也会快一些,等邮件附件下载烦死人了。
解决办法是 压缩,把数据占用的空间压得更小。
用更少的位(bit)来表示数据
图像
图像一般存成一长串像素值,为了知道一行在哪里结束,图像要有元数据,写明尺寸等属性。
每个像素的颜色 是三种原色的组合:红,绿,蓝,每个颜色用一个字节存,数字范围是 0 到 255。
如果红绿蓝都是 255 会得到白色。
这个图像有16个像素(4x4),每个像素3个字节,总共占48个字节(16x3 = 48)
但我们可以压缩到少于 48 个字节
-
减少重复信息
游程编码,适合经常出现相同值的文件。
插入一个额外字节,代表 7 个连续黄色像素,然后删掉后面的重复数据。这时候我们要给字节标上长度。 -
DFTBA
它用更紧凑的方式表示数据块
我们需要一个字典,存储 “代码” 和 “数据” 间的对应关系。
我们可以把图像看成一块块,而不是一个个像素。
为了简单,我们把 2个像素当成 1 块(占6个字节)但你也可以定成其他大小。
霍夫曼树(算法)这里并不是数字
我是为了方便
2 , 1 ,4 ,1
首先,列出所有块,和出现频率。每轮选两个最低的频率。
这里为 1 ,1 ,把它们组成一个树,总频率 2 ,现在完成一轮算法呢。现在我们重新这样做
2 , 4 , 2
就像上次一样,选频率最低的两个,放在一起,并记录总频率
4 , 4
然后
8
可以看作一个树节点,按频率排列
频率低的在最小。
我们把每个分支用 0 和 1 标注
酷的地方是,它们绝对不会冲突,因为树的每条路径是唯一的。
字典也要保存下来,否则 14 bit 毫无意义
加上字典,图像是 30 个字节 。
消除冗余 和 用更紧凑 的表示方法,这两种方法通常会组合使用。
几乎所有无损压缩格式都用了它们,比如 GIF ,PNG,PDF,ZIP
游程编码 和 字典编码 都是无损压缩
压缩时不会丢失信息,解压后,数据和之前完全一样。
无损对很多文件很重要
比如说我给你发了个压缩的 word 文档,你解压之后发现内容变了,这就很糟糕了。
但其他一些文件,丢掉一些数据没什么关系,丢掉那些人类看不出区别的数据
大多数有损压缩技术,都用到了这点
概念
以声音为例,你的听力不是完美的,有些频率我们很擅长,其他一些我们根本听不到,比如超声波,除非你是蝙蝠。
录音乐,超声波数据都可以扔掉,因为人类听不到超声波。
另一方面,人类对人声很敏感,所以应该尽可能保持原样。
低音介于两者之间,人类听得到,但不怎么敏感,一般是感觉到震动
有损音频压缩利用这一点,用不同精度编码不同频段。
听不出什么区别,不会明显影响体验。
音乐发烧友估计要吐槽了,日常生活中你会经常碰到这类音频压缩,所以您在电话里面的声音,和现实中不一样。
压缩音频是为了让更多人能同时打电话,
如果网速变慢了,压缩算法会删更多数据,进一步降低声音质量,所以 Skype 通话有时听起来像个机器人。
和没压缩的音频格式相比,比如 WAV 或 FLAC 。
压缩音频文件如 MP3 ,能小 10 倍甚至更多。省了超多空间。
这些删掉人类无法感知的数据的方法,叫“感知编码”
它依赖于人类的感知,模型来自 “心理物理学”领域
这是各种 “有损压缩图像格式” 的基础,最著名的是 JPEG,但人眼看不出这些细节(我表示看得到)
视频压缩也造成了影响
视频只是一长串连续图片,所以图片的很多方面也适用于视频,但视频可以做一些小技巧,因为帧和帧之间很多像素一样
例如视频里面的背景
视频里不用每一帧都存这些像素,可以只存变了的部分。
很多视频编码格式,只存变化的部分。
这比存所有像素更有效率,利用了帧和帧之间的相似性。
更高级的视频压缩格式 会更进一步,找出帧和帧之间相似的补丁,然后用简单效果实现,比如移动和旋转。变亮和变暗
MPEG-4
是常见标准,可以比原文件小 20 倍到 200倍
但用补丁的移动和旋转,来更新画面,当压缩太严重时会出错,没有足够空间更新补丁内的像素,即使补丁是错的,视频播放器也会照样播放,导致一些怪异又搞笑的效果,您肯定见过这些。
总的来说,压缩对大部分文件类型都有用。
从这个角度来讲,人类不完美的视觉和听觉,也算有用。
学习压缩非常重要,因为可以高效存储图片,音乐,视频
如果没有压缩,在 youtube 看视频几乎不可能
因为你的带宽可能不够(会很卡)
而且供应商不愿意免费传输那么多数据