给自己科普记录一篇文章,关于文本文档与可执行文件,文件的理解。

记录的都是本人的理解,若干年之后回头再来看看, 不知道理解正确与否。

软件开发已经经历过一段时间了,但对于计算机底层的一些逻辑以及运行的模式还是非常的不理解。

就文件这一块,习惯了windows系统,总会通过后缀名来区分不同的文件,txt为文本文件,jpg为照片文件,exe为可执行文件,bat为脚本文件。

学了Linux以后,万物皆文件,windows文件的这些后缀名只不过是区分让不同的应用程序去操作这个文件。

但学过Python都知道,打开文件有两种不同的模式rt,与rb模式,一个是所谓的文本模式,一个是所谓的二进制格式。

在rt模式中,还可以指定encoding的参数。

其实这种高度封装的rt读取方式,虽然让使用者感觉带来了很大的方便,但会把人带偏,至少把我带偏了,在字符编码以及打开文件的操作,一直困惑了我很久,百度是找不到答案的,google英文,我也找不到相关资料。

其实从分类来讲,我自己把文件归纳了三个分类,一个就是所谓的文本文档,是给人看的,一个所谓的可执行文件,是直接给机器用的,还有一个其它的文件,是给专门的应用程序用的。虽然文本文档也是需要专门的应用打开,人类才可以看,但他就一个参数,就是编码集。

再来回来,虽然我前面分了三大类,但只要放在电脑内存执行或者保存到硬盘里面的,都是0101的二进制信息,这句话,听着简单,其实我花了很久的时间才理解。

我们编程Python,C,就算汇编,写的都是文本文档,文本文档也是最基本的人类能够简单看懂的文件。但文本文档对于计算机来说根本就是天书,这些文字通过编码集保存在硬盘的0101,计算机无法理解,所以需要通过编译或者解释器,转换成计算机能够理解的信息。

虽然无论什么文件保存形式都是0101,但文本文件,显然是给人类使用的,我们人类不可能直接在计算机上面敲击0101来跟计算机沟通,我们通过我们自己的语言,写入信息。再通过专门的编码集存入电脑。

当我们写的信息也就是程序想让计算机做我们想做的逻辑时,这个时候编译器或者解释器就是翻译了,它将人类写的文件的二进制,通过专门的逻辑转换成计算机能够读懂的二进制,让计算机执行该逻辑。

其实任何文件都是0101的形式,Python在执行源码之前,也会先转换成字节码,交由解释器执行,其实没有字节码也没关系,只不过每次执行的时候,需要多操作一次将源码转换成字节码的过程。

有了这个理解,其实我们可以忘记rt模式处理文件,可以全部通过r模式来处理文本文档,而且通过直接操作二进制的字节序列,可以让我们更好的理解计算保存信息的字节流。

这个在C语言中我记得是通过 char xx[]来定义。

总的来说,Python对很多底层进行了封装,很多东西,可能你会用,但不理解为什么,其实我不是很喜欢这样的感觉,总体来说,C语言更加适合对于计算机的学习,当然我觉的汇编其实也非常不错,虽然我学了一点点就放弃了。

原文地址:https://www.cnblogs.com/sidianok/p/14876223.html