关于JPEG、PDF等文件未采用纯ASCII编码及Linux plocate数据库类似现象的技术疑问
嘿,这个问题问到点子上了!我来给你掰扯清楚背后的门道:
ASCII的适用场景有限:ASCII确实只用1字节存储字符,空间占用小,但它只能覆盖英文字母、数字和少量符号,完全满足不了复杂文件的需求。比如JPEG是图像文件,它存的是像素颜色数据、压缩算法参数这些二进制数值,根本不是文本;PDF更复杂,除了文字,还有排版规则、嵌入字体、图片资源,这些都没法用ASCII直接表达。这类文件本质是二进制文件,不是纯文本,用文本编辑器打开时,编辑器会强行把二进制数据解析成ASCII字符,自然就出现一堆看不懂的奇怪符号。
不是不用ASCII,是用了反而更糟:就算硬把非文本数据转成ASCII,结果只会更差。比如一张200×200的灰度图,每个像素用1字节存亮度值,总共40000字节;要是转成ASCII字符来存,每个数值对应一个字符,不仅空间没省,还彻底丢了图像的结构信息,根本没法还原成图片。PDF里的文字虽然部分是ASCII,但为了压缩体积、支持多语言(比如中文、日文)或者加密,会用更高效的编码或压缩方案,所以整体还是二进制格式。
plocate数据库的特殊设计:plocate的数据库(通常在
/var/lib/plocate/plocate.db)是经过压缩和索引优化的二进制文件。它存的不是纯文本的文件路径列表,而是路径的哈希值、快速检索的索引结构——这么做是为了让搜索速度飞起,同时尽量缩小磁盘占用。如果存成纯ASCII文本,搜索时得逐行扫描,速度会慢到离谱,而且纯文本没有索引,根本实现不了plocate的秒级查找能力。
简单说就是:ASCII只适合纯文本场景,对于需要存储复杂结构、多媒体数据或者高效检索的需求,二进制格式才是最优解,虽然用文本编辑器打开会乱码,但这正是它们的设计目标决定的。
备注:内容来源于stack exchange,提问作者Pranjal Kumar

