| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2583 人关注过本帖
标题:关于文本文件与二进制文件以及文本流与二进制流(终结版)
只看楼主 加入收藏
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
结帖率:98.26%
收藏
 问题点数:0 回复次数:12 
关于文本文件与二进制文件以及文本流与二进制流(终结版)
                               关于文本文件与二进制文件以及文本流与二进制流-----个人总结
1)文本文件与二进制文件的介绍
所谓文本文件就是在文件中存储的都是字符,,比如一个字符串123在文本文件中存储的都是其ASCII的形式,也就是每个字符的ASCII的形式:
31 32 33 在比如一个整型数据123在文本文件中存储的也是:31 32 33 也就是每个字符的ASCII的形式;所谓二进制文件的存储形式是二进制,对于一个字符串123在二进制文件中的存储形式是将其ASCII码转换为二进制的形式:其ASCII是31 32 33然后将该ASCII码转换为二进制,也就是:00011111 00100000 00100001 的形式。而对于一个整型数据123在二进制文件中的存储的是123的二进制形式:00000000 00000000 00000000 01111011。

这个只是我们从文件的形式上这样去理解,但是在计算机的内存存储的都是二进制形式,我们之所以能够看见文本文件中的内容是因为文本文件采用的是ASCII解码形式,而二进制文件采用的则是二进制的解码形式!因此有时候当我们用一个记事本打开一个二进制文件的时候会看见很多我们不希望看见的东西,那就是乱码!(它们采用的解码形式不一样)

通过上面简短的介绍我们可以字读二进制文件要比文本文件节约空间,这是因为文本文件存储的就是单个的字符,比如对于一个整型数据2147483647,在文本文件中要占据10个字节的内存空间,而在二进制文件中占据的只是4个字节的内存空间,也就是整型数据的长度!

2)文本流与二进制流的介绍
先来讲解一下流是什么呢??流就好比是一个水管子(这个比喻可能有点不太恰当),而这个水管子里的“水”就好象是计算机中的数据 ,这个水管子的源头就是存储在磁盘上的数据(标记的是文件)。当这个水管子中装满了从“源头”(存储在磁盘上的数据)得到“水”(数据)的时候然后就要将这些水输到一个指定的“目的地”,而这个“目的地”在计算机中就是缓冲区,将水管子中的“水”(数据)放到了“目的地”(缓冲区)中 。那么需要使用“水”(数据)的时候就可以直接到这个“目的地”(缓冲区)中取“水”(数据) ,这样就比直接到“源头”(存储在磁盘上的数据)取“水”(数据)要节省很多时间和路程!!!
也许这就是流一词的得来吧!!(只是个人的理解)

这个流在计算机中分为了两种,一种叫文本流,另一种叫二进制流,在这里有一点必须要说明白,不要误认为文本文件就必须要以文本流的方式打开,而二进制文件就必须要以二进制流的方式打开,这个理解是大错特错的!!所谓的文本文件与二进制文件只是采用的解码方式与存储方式不一样,任何一个文件都可以采用文本流与二进制流的方式打开!这一点一定要搞清楚了!

文本流与二进制流有一个很重要的区别。如果一个文件以文本流的方式打开,那么文件中连续存储的0D 0A组合会被转换为一个字符0A ,也就是一个换行符!!如果一个文件以二进制流的方式打开的话则不会出现上述的那种情况,而是一个字符一个字符的读取,也就是说有多少个字符我就读多少一个字符,我才不管连续存储的0D 0A组合要转换为一个字符0A。遇到了这个组合就直接读取0D 0A 。



3)回车符的转换

① 我们在vc++6.0中建立一个c语言的控制台程序,运行程序,弹出一个类似dos窗口的控制台程序窗口,当我们需要输入数据的时候,在输入完数据之后会敲一下回车键,敲下的这个回车键的作用是将数据从流(上面已经讲过,不再重复)中写入到缓冲区中。这个敲入的回车键也会被写入到缓冲区中,但写入的并不是一个0D字符,而是0D0A这两个字符,接下来系统会遍历缓冲区中的数据,当遇到0D0A组合的时候会将这个组合转换为一个字符0A,并非一开始就写入一个换行符0A,而是需要一个转换的过程!

虽然中间需要一个转换的过程,但最后这个回车符\r(0D)被转换为了一个换行符\n(0A)

② 我们建立一个记事本文件,当我们通过键盘向一个记事本中输入数据的时候,在输入完一行需要换行的时候我们在键盘上敲入一个回车键,那么这个回车键(\r),而这个回车键则会被转换为两个字符:\r\n(0D0A),也就是此时写入文件的是两个字符!!!

这两个回车符的转换是不一样的!!


以上写的东西只是我个人的见解,如果有不对的地方欢迎指正出来!!!
搜索更多相关主题的帖子: 二进制 文本文件 
2010-11-28 19:11
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
123在文本文件中存储的都是其ASCII的形式,也就是每个字符的ASCII的形式

第一句话就这么悲剧 !/

我就是真命天子,顺我者生,逆我者死!
2010-11-28 19:15
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 2楼 BlueGuy
呵呵,难道不是吗??然后在进行解码就是123呀!!!!不对吗?

愿用余生致力编程
2010-11-28 19:18
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
没用过记事本 存储 unicode格式的文本吧?

我就是真命天子,顺我者生,逆我者死!
2010-11-28 19:18
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 2楼 BlueGuy
这个只是我们从文件的形式上这样去理解

愿用余生致力编程
2010-11-28 19:19
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
比如一个字符串123在文本文件中存储的都是其ASCII的形式,也就是每个字符的ASCII的形式:
// 你这句话确实是错的呀, 保存为 unicode格式的文本, 总不能用 解析 AscII码的方式去解析吧?

我就是真命天子,顺我者生,逆我者死!
2010-11-28 19:22
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 6楼 BlueGuy
我讲的都是ASCII的解码形式!

愿用余生致力编程
2010-11-28 19:24
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用我菜119在2010-11-28 19:24:44的发言:

我讲的都是ASCII的解码形式!
哦, 我误解了,

我就是真命天子,顺我者生,逆我者死!
2010-11-28 19:25
じらや
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-11-30
收藏
得分:0 
新手问下,如果我有一个二进制文件,我要把它用文本形式输出怎么做。就是输出在记事本可以看懂的,不是乱码。
2010-11-30 15:43
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 9楼 じらや
加我一下QQ:664939085

愿用余生致力编程
2010-11-30 16:00
快速回复:关于文本文件与二进制文件以及文本流与二进制流(终结版)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023446 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved