文件的结构

文件的物理结构是从实现观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。文件的逻辑结构是从用户观点出发看到的文件的组织形式。文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大关系。

按逻辑结构,文件有无结构文件和有结构文件两种类型:无结构文件和有结构文件。

无结构文件(流式文件)

无结构文件是最简单的文件组织形式。无结构文件将数据按顺序组织成记录并积累保存,以字节(Byte)为单位。由于无结构文件没有结构,因而对记录的访问只能通过穷举搜索的方式,故这种文件形式对大多数应用不适用。但字符流的无结构文件管理简单,用户可以方便地对其进行操作。所以,那些对基本信息单位操作不多的文件较适于釆用字符流的无结构方式,如源程序文件、目标代码文件等。

有结构文件(记录式文件)

有结构文件按记录的组织形式可以分为:

1) 顺序文件。

文件中的记录一个接一个地顺序排列,记录可以是定长的或变长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。顺序文件有以下两种结构:
第一种是串结构,记录之间的顺序与关键字无关。通常的办法是由时间决定,即按存入时间的先后排列,最先存入的记录作为第1个记录,其次存入的为第2个记录,依此类推。
第二种是顺序结构,指文件中的所有记录按关键字顺序排列。

在对记录进行批量操作时,即每次要读或写一大批记录,对顺序文件的效率是所有逻辑文件中最高的;此外,也只有顺序文件才能存储在磁带上,并能有效地工作,但顺序文件对查找、修改、增加或删除单个记录的操作比较困难。

2) 索引文件。

如下图所示。对于定长记录文件,如果要查找第i个记录,可直接根据下式计算来获得第i个记录相对于第一个记录的地址:

然而,对于可变长记录的文件,要查找第i个记录时,必须顺序地查找前i-1个记录,从而获得相应记录的长度L,然后才能按下式计算出第i个记录的首址:

注意:假定每个记录前用一个字节指明该记录的长度。


图 索引文件示意图

变长记录文件只能顺序查找,系统开销较大。为此可以建立一张索引表以加快检索速度,索引表本身是定长记录的顺序文件。在记录很多或是访问要求高的文件中,需要引入索引以提供有效的访问。实际中,通过索引可以成百上千倍地提高访问速度。

3) 索引顺序文件。

索引顺序文件是顺序和索引两种组织形式的结合。索引顺序文件将顺序文件中的所有记录分为若干个组,为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。

如图所示,主文件名包含姓名和其他数据项。姓名为关键字,索引表中为每组的第一个记录(不是每个记录)的关键字值,用指计指向主文件中该记录的起始位置。索引表只包含关键字和指计两个数据项,所有姓名关键字递增排列。主文件中记录分组排列,同一个组中关键字可以无序,但组与组之间关键字必须有序。查找一个记录时,通过索引表找到其所在的组,然后在该组中使用顺序查找就能很快地找到记录。


图 索引顺序文件示意图

对于含有N个记录的顺序文件,查找某关键字值的记录时平均需要查找N/2次。在索引顺序文件中,假设N个记录分为N1/2组,索引表中有N1/2个表项,每组有N1/2个记录,在查找某关键字值的记录时,先顺序查找索引表,需要查找N1/2/2次,然后再在主文件中对应的组中顺序查找,也需要查找N1/2/2次,这样总共查找N1/2/2+N1/2/2=N1/2次。显然,索引顺序文件提高了查找效率,如果记录数很多,可以釆用两级或多级索引。

索引文件和索引顺序文件都提高了存取的速度,但因为配置索引表而增加了存储空间。

4) 直接文件或散列文件(Hash File)

给定记录的键值或通过Hash函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。
散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。

时间: 2024-11-05 11:03:58

文件的结构的相关文章

一篇文章带你搞懂DEX文件的结构

DEX文件就是Android Dalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了.下面,开练! 建议:不要只看,跟着我做.看再多遍不如自己亲自实践一遍来的可靠,别问我为什么知道.泪崩ing..... 首先,我们需要自己构造一个dex文件,因为自己构造的比较简单,分析起来比较容易.等你简单的会了,难的自然也就懂了. 0x00■  构造DEX文件 首先,我们编写一个简单的Java程序,如下: public class HelloWorld { int a = 0; static

Class类文件的结构

1.Class文件是一组以8位字节为基础单元的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有任何的分隔符,这使得整个Class文件中存储的内容几乎全部都是程序运行的必要数据,没有空隙存在.当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割为若干个8位字节进行存储. 2.按照Java虚拟机规定,Class文件格式采用一种类似C语言结构体的伪机构来存储,这种伪结构中只有两种数据类型:无符号数和表. 3.无符号数属于基本的数据类型,以u1.u2.u4.u8来

1-5html文件基本结构

认识html文件基本结构 1)这一节中我们来学习html文件的结构:一个HTML文件是有自己固定的结构的. <html> <head>...</head> <body>...</body> </html> 代码讲解: 1. <html></html>称为根标签,所有的网页标签都在<html></html>中. 2. <head> 标签用于定义文档的头部,它是所有头部元素的容器

Atitit 大json文件的结构化查看解决方案,高性能的jsonview &#160;attilax总结.docx

Atitit 大json文件的结构化查看解决方案,高性能的jsonview  attilax总结.docx 1.1. 实现目标:1 1.2. 实现key与value类型的..一直分析到非 jsonobject jsonarray位置..1 1.3. 现存问题  fastjson使用string格式的内容,导致文件内容大小依然存在上限..1 1.4. 效果2 1.5. 参考资料4 选型了很多jsonviewer,只能对小数据量的文件生效..一旦涉及到9M左右的json文件,就都统统歇菜了.. 只好

认识html文件基本结构

html文件的结构:一个HTML文件是有自己固定的结构的. <html> <head>...</head> <body>...</body> </html> 代码讲解: 1. <html></html>称为根标签,所有的网页标签都在<html></html>中. 2. <head> 标签用于定义文档的头部,它是所有头部元素的容器. 头部元素有<title>.<

JBoss AS 7之文件夹结构(The Return Of The King)

1.2 JBoss As 7体系结构 以下介绍一下JBoss的体系结构,详细的文件夹结构. 假设熟悉曾经JBoss版本号的人,一定会发现JBoss AS 7与之前的JBoss的文件夹结构有了非常大的不同.以下介绍一下JBoss AS 7的文件夹结构.                                         主文件夹结构 文件夹 描写叙述 bin Unix和win环境下的启动脚本和启动配置文件 bundles 存放OSGI bundle docs/schema 存放XML

Cocos2d-x旧引擎文件夹结构

转自:http://blog.csdn.net/lwuit/article/details/7870395 Cocos2d-x的文件夹结构例如以下: 文件夹的详细结构介绍例如以下: Box2D:物理引擎Box2D的相关源文件 Chipmunk:物理引擎chipmunk的相关源文件 cocos2dx:cocos2d-x引擎的核心部分.存放了引擎的大部分源文件 CocosDenshion:声音模块相关源文件 Debug.win32:在Windows 上调试输出文件夹 Doxygen:生成doxyge

Cocos2d-x 3.0新引擎文件夹结构

Cocos2d-x 3.0新引擎文件夹结构 2014年4月29日  Cocos2d-x 3.0学习 作为一个Cocos2d-x的菜鸟,我倒是挺愿意关注不同版本号之间的差别,Cocos2d-x 3.0自2013年7月份開始公布alpha0-pre版本号,到2014年4月23日公布正式版,历经9个版本号,总算是敲定了.我刚入手的配置环境是基于Cocos2d-x 2.2.3版本号的,略微对照一下,就能够知道最新公布的3.0正式版真的齐整了非常多.看看以下两张截图 Cocos2d-x 2.2.3版本号文

nodeJS实现完整文件夹结构压缩

为实现node下打包压缩,了解额好几种常见的node第三方包,比如archiver,也可以实现文件夹打包压缩. 因为archiver需要配置文件夹下的文件,也可以用*来打包所有,但是如果文件夹下还有多层文件夹嵌套,实现起来就比较麻烦了.还有就是一些压缩工具的压缩算法并不符合我们想要的,或者输出文件的格式又比较单一,不能满足. 最后决定用node自带的内置模块加第三方模块结合使用,满足我们的各类需求,并且可以完美的打包整个文件夹包括文件夹结构来压缩. 需要模块如下: 其中fstream和tar为第