几何尺寸与公差论坛

 找回密码
 注册
查看: 2154|回复: 0

【转帖】二进制文本:二进制文件比文本文件能够节省空间吗??

[复制链接]
发表于 2008-11-26 01:14:53 | 显示全部楼层 |阅读模式
我有一个大概5m多txt的词典信息,虚心请教傲博网友怎么才能做成一个只占很少空间的文件,大家都是怎么做的?保存成二进制的文件可以吗?

还有,二进制文件比文本文件到底有什么好处啊?

二进制文件和文本文件只是打开文件的方式而已,跟保存到磁盘里的文件没关系.
磁盘里的文件都是二进制格式的.

那二进制文件比文本文件到底有什么好处啊?

同意的,如果LZ要节省空间的话,可以试着用哈夫曼等算法压缩一下~~~

肯定节省空间
虽然磁盘里的文件都是二进制格式的
但是 要懂得 数字格式以二进制保存的话 只需要保存实际值
文本格式却要无论怎么占用一个字节当然 是unicode更麻烦

二进制文件的好处 自然是可以无差别对待输入数据流

当然 对小菜的用途 用二进制 没有多少改观的 还是用个简单的压缩算法 压缩一下吧

text文件 压缩效果和明显的

多谢各位的解答.采用压缩算法的话,我怕解压也耗时间,就会慢了.我的文本文件是有很多行的词条构成的,除了哈夫曼压缩,还有别的压缩算法吗?哪种压缩Method相对来说压缩大小和解压时间比较合适?

因为再用这个词典的时候会进行查找操作

5M大小根本算不上什么,用不着压缩,除非你的program在特殊的电脑环境下运行.
储存为非文本文件,按照一定格式储存,你存取时会比较方便;如果用文本文件,在没有索引的Case下速度也比较慢.
还有一点,文本文件很容易被人看到内容,也容易被人修改.

同意的第一句话
o(∩_∩)o



恩,确实需要压缩的啊^_^

储存为非文本文件,按照一定格式储存,你存取时会比较方便;
-------------------------------------------------
自己设计格式?可是大小还是不能压缩啊

重复数据多就用行程
要么用霍夫曼
或者字典法


你要的是内存空间大小还是硬盘空间大小?

小菜所谓的二进制文件有很多种定义
1. 文件打开方式来说,有二进制打开方式和文本打开方式,其不同是文本方式会在读的时候把\n转换为\r\n,存储时做反向转换,而二进制方式则不作任何转换.

2. 存储方式:其实很多人说二进制文件是以为二进制文件是一种特殊的存储格式.而实际上这种所谓的特殊存储格式是不存在的.很多人以为电子开关有两种状态,因此文件存储都是以二进制方式存储的.其实这是一种把软件和硬件混淆起来的误解.当然电子文件最终都会转化为某种二值开关的状态,但是不能说文件是二进制的.实际上,从逻辑上讲,所有文件都以字节为单位存储,我们逻辑上应该把它当作一个字节数组,而不是某个二进制码流.

实际上,如果一定有一种和普通文本不一样的存储方式的话,我们应该说结构化存储.结构化存储文件用某种特殊的数据结构管理文件内的数据.例如:doc文件就是一种结构化存储文件,zip文件也是一种.每个结构化存储文件都需要用它特有的软件来打开,对应软件必须理解这种文件结构.例如:mspaint可以打开bmp文件,doc文件可以用winword打开.

一般而言,由于数据结构需要额外字节,这样的文件比普通文本文件要大.当然,由于使用了压缩算法,压缩会使得文件更小,但是如果没有压缩,应该更大才对.

结构化存储的好处是:1. 可以确保文件按照某种固定的逻辑存储 2. 读取速度快 3.支持逻辑上的Insert(文件物理上不可Insert)

至于小菜想压缩空间,首先对5M文件不值得,压缩解压缩是以时间换空间,而现在的潮流是以空间换时间,除非空间占有率太大,而5M显然不大.

从某种意义上可以这么说

如果是字典,还是去研究一下数据结构,以结构化存储方式存储,因为这可以对你的字典进行index/hash,加快查字典速度.这不过不是简单的事情,三言两语说不清,不太适合在这样的网站问哦


受益了




4 楼说的很有趣,怎么保存实际的值?文件永远是以字节为单位的

在提醒下的 别吧 以字节为最小计量单位跟以字节为存储方式混淆了

当然 我昵称是 Super N-o.O-B 哈哈

超级菜鸟  初学语言 Error之处  还望海涵


strangefay

要说常见的二进制(或曰:结构化)存储,看看所谓的TLV格式、XDR格式和ASN.1吧.你的Code在复杂Case下没有任何实际的意义.Result甚至可以随着i值的不同而变化,不具有说明意义.

对不起  的星级用户
没有学那么深  学c语言还没一个月  哈哈

佩服您了  但是 我只讨论C语言的二进制存储  不见得 二进制存储都指的是结构化存储吧 哈哈

我只想问一句  可以存储整形的实际值不?

菜鸟入门 让您见笑了  哈哈

TLV的意思就是:Type类型, Lenght长度,Value值;
Type和Length的长度固定,一般那是2、4个字节;
Value的长度有Length指定;
解析Method:
      1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4
      2.读取lenght,转换为ntohl、ntohs转换为主机字节序得到长度;指针偏移+2或4
      3.根据得到的长度读取value,指针偏移+Length;
      ....
      继续处理后面的tlv;
--------------------------------------------------------
抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标记,缩写为ASN.1.

    在ASN.1中,一个类型就是值的一个集合.有些类型有有限个值,有些则有无限多个.一个给定的ASN.1类型的值是该类型集合里的一个元素.ASN.1有四种类型:简单类型,它相当于原子,没有下层组件;结构类型,有组成部分;标签类型,由其它类型生成;其它类型,包括CHOICE和ANY类型.可以使用ASN.1的分配符(::=)给类型和值指定名字,这些名字可以用于定义其它类型或值.
---------------------------------------------------------
XDR(eXternal Data Representation) 提供一种Method把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有数据代表的意义都是相同的.

18 楼说的和我说的根本不时一回事情哦数和其格式化后的字符串根本不是同一个东西,因此你比较它们俩没有意义的

不好意思 理解Error  哈哈
大侠见笑了  



TLV XDR ASN.1
.............. 做网络的? 这是什么地方学的啊..

老师没教这个....


受教受教.........

5m的txt文件,如果不用压缩算法,没法变小存下.而且上面很多人已经说了,5M其实不算大.
二进制文件和文本文件是不同的文件类型,一个是用来表示二进制数据的,例如视频,program文件.一个是用来表示文本的,
你的本来就是文本文件,转存成二进制还需要做转换,又不能节省空间,没什么必要吧?

还是找个DataBase用吧,连字典的搜索算法都不用写了.

说压缩算法就想起 DNS Message 中用的压缩算法..如果有大量重复的词条,可以借鉴.

没有一个前提条件,没有可比性

这个错误orBug真够基础的..

lz抛砖引玉啊 学习

1.存储字符时,二进制和文本占用的空间应该是一样的.
在存储数据时,二进制占用存储空间小,例如double型数据,按照IEEE754占8个字节,若用文本模式,同等精度,占用字节数会增加.

2.文本文件一般以流的模式存储,地址的概念不明确,由于其可读性强(易于修改),也不适用于用地址来标明位置,在存储方面不易于利于设计良好的数据结构.
二进制文件,地址概念非常明确,在良好的数据结构的基础上较文本文件不但可以节省空间,还更适合于应用数据结构的思想来进行查询操作等.DataBase便是一个最好的实例.

对于字典来说,第一方面不容易体现,第二方面需要一个良好的设计为基础.
总体来说,良好的二进制文件较文本文件更容易存储更多的数据.

不清楚LZ怎么定义的文件存储格式,可以用压缩工具试一下,看看有没有效果

晕,5M还想压缩
这种工作没意义啊

建议用MDBDataBase,
如果文本文件用在网络上,找一个你使用对应program的ZIP压缩算法,网上很多.

在32位机器上,int数据类型的长度是4个字节,那么要存储100001,100002,100003,100004,100005,100006这6个数,当使用二进制时只要用4*6=24个字节就够了,但是用文本方式(用记事本打开可读的),则每个数要占6个字节,并且,要想人们看上到舒服一点的话,还可以排一下格式,例如用逗号分格,或者每个数占一行.当然了,如果是存1,2,3,4,5,6这6个数,那么文本方式每个数只要一个字节就够了.
    怎么越说越乱呀.....看看program的Result就懂得了.

可以用gzip 压缩一下,像stardict这种软件的词典就是用gzip压缩的纯文本做辞典.效果很明显,算法也简单.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|几何尺寸与公差论坛

GMT+8, 2024-12-22 11:58 , Processed in 0.035859 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表