当前课程知识点:程序设计基础 > 第八章 非文本数据处理 > 程设论道 > 程设论道一
那我们这一章讲了一个很重要的概念
有文本 二进制这样一种打开文件的两种方式
这个概念根据我们以前在学校里讲课的时候
很多学生其实是蛮容易混淆的一个东西
而且这个里头背后的思想其实也很深刻的
所以我觉得得仔细讨论一下这里头的情况
对对对 到底什么是文本文件什么是非文本文件
然后二进制我们严格来讲是叫打开的模式
不是说就是二进制的一个文件或者不是二进制的文件
就是同样是文本文件也可以拿二进制文件去打开
可能二进制文件也可以
拿文本文件的方式去试着打开一下
可能读的内容是什么样子就不知道了
所以关键就到底这个文件什么是文本文件
什么是这个非文本文件
但其实就是在计算机里头我们在第一第二章
或者第一章其实已经提到了计算机用来处理数据
数据在计算机里头存储和表示的时候其实都是二进制
所以文件作为一种计算机处理数据存储数据的一种形态
其实里头的每一个信息都是以二进制方式存储的
所以可以说所有的文件其实都是二进制的
这是一个很重要的一个看法
反过来比第二章咱们讲变量和类型的时候
我就觉得文本文件二进制文件
区别就跟这个类型的概念比较相像
就看你怎么去解释它 就是存在那可能是
二进制一个表达的文本一个二进制的一串数
如果你拿二进制去打开那你就得二进制的方式
去解读它去解释它去操作它
然后你拿文本模式打开可能就它真的是文本的数据
处理起来会有一个特殊的方便
其实所谓文本数据就指的是说
二进制可以都解释成
一般是可显示的那些字符人眼能够直接去看的
那一般指的二进制是说你没有办法
都解释成可显示的一个字符
或者其实我们在第二章也举过一个例子
就是在讲那个指针那个cout输出的时候
普通的指针我们那个例子里头
cout出来的是那个地址的值
就是一个十六进制的零多少多少多少
但是如果是个char*的
你上一章讲的字符串那些东西
如果是char*的它输出cout
之后它不是输出那个地址值
它而是输出是那个地址开始的字符的内容
然后直到碰到零为止
把它当成一个字符串来处理了来输出了
也就是说它其实内存里头还是那个东西
一个值一个地址值
但是 当计算机去处理它去把它显示出来的时候
它做了不一样的一种解读
那我们今天在这讲二进制的
或者说文本文件这种区别的时候
说文本文件为什么看上去跟二进制不太一样
那其实就是在它去显示它的时候
它并没有去显示那个二进制的值
比方说我们一般用编辑器去打开它
比方用记事本或者我们编程序的工具
去打开它的时候我们并不是看到的二进制的值
而是把这个值去做了一种转换
去查那个ASCⅡ码表把它
对应的字符给它显示出来了
就像我们第二章里头说
我cout一个char*一样
我并没有去输出那个地址而是去干了另外一个事情
这个我觉得确实是一个很类似的对比
然后我觉得刚才这个大多数情况可能是
一个文件摆在那了然后我们怎么去读它
如果是一个实际问题我想把一个数存在一个文件里
那这个时候其实选择权在我们自己
到底是存成文本模式还是存成二进制模式
这两个文件存储方式的区别
就在于你比如说要存一个123
如果说我拿二进制模式 我可能存一个int
那就是咱们四个字节存在里面
那要存文本模式可能要123那三个ASC码
就分别存在可能才三个字节反倒还小一点
但是这个也只是你在这种数字或者数值
这种情况下才会存在这种差异
你比方说字符你看上去是个字符A
你以为你存的字符A
其实它还是存的那个A的ASC码值
你刚才说的123或者说甚至浮点数1.23
你看上去是1.23那你如果存值的话
那就真是1.23这个浮点的0101的串
如果我们说存字符
其含义潜台词是说按照字符1和点2和3
四个字符去存的它的ASC码值
所以可能如果咱们存的数值很大
咱们就可以比较一下到底哪个更省空间
再来去挑 首先不管文本文件还是各种文件
都有一个格式的问题看你怎么去解释它
所以有些情况下可能就拿文本方式存就特别浪费
就比如说其实咱们第二章论道的时候也提到过
把东西数字化然后这么一个概念
那其实我们生活中很多东西
一旦数字化的话都变成一串的数
然后这个数的取值范围又很大
这个用文本模式来存的话中间还得有点格式信息
有点逗号这种分隔符
然后就特别浪费空间
就像咱们平时看的这种电影
你想像一下试着把它拿文本模式存一下
那就不是电影了对不对 它也不可能变成小说
它那个媒体形式是通过一种光影
这种视觉的信息进来的
你文本是一种字符的这种变化 它两个不太一样
所以还是根据你的内容去选择你的更合适的那个
所以其实我们可以从另外一个角度来讲
可能也能帮助理解文本和二进制这种所谓的差别
你看我们章节里面叫非文本数据的这种处理
那我们没说二进制数据的处理
那其实就是说在我们这个数据里头既然说
大家都是二进制存在着的
那为什么还有文本
它其实是指它信息的一种类型
那跟它相对应的或者说是平行的 有图像
这肯定是非文本的 有这个语音
那肯定也是非文本的 因为你只能看只能听
那不是字所以你谈不上文本不文本
它根本就不是字你说你怎么用文本
所以这么一想你就可以想到
什么文本语音图像
它们其实都是以二进制方式存储起来
只不过 这些数据 如果它是
我们说它是文本的时候是说你用
记事本打开你能看到一个个有意义的字符
当我们说它是图像的时候
是因为你拿了一个各种看照片的工具
你能看到一幅很有意义的画
当我们说它是语音或者说视频电影的时候
是因为你拿相应的这种工具能够
以那种格式去解读那个二进制的内容
所以文本是被一个工具以它的特征方式
解释出来一种让你看到的字符的形式
内部的其实还是二进制的
所以这个确实是跟大家去聊一聊这个
还有这一章我觉得大家可以聊一聊到底什么是文件
因为这个不是我们生活中我有一个什么什么文件
我这真的是有一个文件柜装了很多很多文件
我们计算机可以有文件跟这个概念有联系
但是也有明显的差别
你说这个我们在最初刚开始学计算机的时候
第一次碰到文件的概念真的是像你刚才说的那样子
去想我们日常生活中碰到的那些东西
觉得很难理解这个
所以这个里头我们从上一章开始到这一章
其实是讲了两章
包括我们下一章还会讲文件
那么这个文件实际上是
计算机领域一个非常重要的概念
它其实牵扯到对于除内存以外的
就其他的这种设备或者资源它的一种管理
或者说它的一种有效的这种空间的一种命名
就相当于我们程序里头有数组有个变量
它其实是对内存里头一片区域的一个命名
那我们如果是硬盘上的呢
外面也希望画一个地 这个地方叫个什么名字
如果没有文件这个概念我可能
想象不同的程序就得去抢
硬盘上那个地 谁抢到就算谁的
然后我下一个人来
要是霸道一点我就把你那个地占用了
那原来人家写的那个东西数据就丢掉了
也跟内存一样是个覆盖的过程
那这种事情我们得有一个合理的机制来把它规避掉
那这个文件的概念就是我底下有一个系统
来帮你抢一块地
然后我来保护你不会被别人给占掉
所以把一些需要你管理需要你分配需要你调节的东西
哪怕是抽象的哪怕它是有实际东西的
给它一个名称这样话它管理就顺了
这个其实跟我们在第二章论道
的时候说变量是干什么的
变量是把你这里头有需要的概念我把它符号化
有些中间结果什么之类的
这样的话它就可以表示出来
其实文件其实也有一个类似的意图在里面
我把它管理起来
这个我觉得我们理解它第一个很重要的一个方面
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测