热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

文件内容组织入门

文件里面存放的是数据,而数据和数据之间有可能存在某种关系。这种关系是否由文件系统捕捉就决定了文件内容的组织形式。从哲学的高度看,文件内容的组织有两种&#

文件里面存放的是数据,而数据和数据之间有可能存在某种关系。这种关系是否由文件系统捕捉就决定了文件内容的组织形式。从哲学的高度看,文件内容的组织有两种:关系导向型组织和非关系导向型组织。


1.关系导向型组织

关系型导向型文件的内容的组织形式就是将数据之间的关系记录在文件里面,文件的构造与数据之间的关系存在某种对应关系。例如,记录流存放方式下,数据以一个记录一个记录的方式顺序排列,并不捕捉每个记录之间的关系;在树型存放方式下,数据不只是按记录存放,且捕捉记录之间的关系,但记录之间的关系是一种层次结构,不形成环;在网络存放方式下,记录之间的关系可以形成环。

在这里插入图片描述


2.非关系导向型组织

**非关系导向型文件内容的组织形式不考虑数据里面的任何结构。**对于此种方式来说,数据就是一个数据流,没有记录,没有关系。这个数据流既可以是字位流,也可以是字节流,也可以是数据块流。它们之间的不同就是这个“流”的单位不同,如图16-4所示。
在这里插入图片描述
那么在这么多种组织方式中,哪一种最好呢?或者说哪一种是最受欢迎的呢?

那我们就来分析一下。在记录方式下,一个记录就是数据的最小构成单位。
比如,对于一个存放学生信息的文件来说,一个记录可能包括姓名、学号、班级、专业等信息。对文件的访问按记录为单位进行,也就说每次读取要读取一个或多个记录,不能在记录中间开始读写操作。因此,以这种方式构建的文件系统就必须维护或者知道很多信息,例如,一个数据记录有多大?数据记录里面的关键值处于什么位置?只有掌握了这些信息,文件系统才知道读写n个记录时到底是读写多少个字节,才能根据给定的关键值正确读写相关的数据记录。

在树型或网络型存放方式下,文件系统要知道的信息就更多了,除了记录本身的信息外,还需要知道记录之间的关系,从而造成文件系统更加复杂。

**相对关系导向型组织方式,非关系导向型方式就简单多了。**在这类模式下,文件系统无须知道关于数据的任何细节。对于这种方式来说,数据就是0101这种数据流。至于这个0101代表的是什么东西,文件不必知道,也不想知道。在这种方式下,文件系统将大大简化。

那么复杂的文件系统和简单的文件系统,我们需要哪一种呢?

简单为美:一切都应该尽可能简单,但没有更简单。——爱因斯坦

在关系导向型组织方式下,文件系统需要知道数据的很多细节,这将使得文件系统复杂。这种复杂性带来了两个巨大的负面效应:一是文件系统本身的设计将更为费时、费力;二是一个文件不能在另一个文件系统下被访问,因为另一个文件系统的记录格式可能不同。这样势必造成文件可靠性和兼容性存在问题。

更关键的是,这些细节不是文件系统的责任范围,而是应用软件或用户的职责范围。因为这些细节直接涉及文件里面数据的语义。前面说过,文件系统的目的是让磁盘更加容易使用,而不是为用户管理数据的语义,即这种管理语义的能力超出了文件系统设计的初衷。况且,由文件系统掌握语义也不安全。在这种情况下,用户的数据无法得到保障,因为任何人可以打开任何文件。

因此,从可靠性、安全性和兼容性来说,关系导向型组织方式都不合适。

**对于非关系导向型文件内容组织来说,由于操作系统辨认的是数据块、字节或字位,数据的语义并没有包含在组织方式里,任何操作系统都可以读写所有的文件。**因为所有操作系统都知道一个字节或字位是多少。用户要读多少个字节,操作系统就读多少个字节。这就解决了兼容性的问题。至于读出的一串010101010到底是什么意思,操作系统就不用管了,也不应该管。因为对数据进行翻译是应用程序的事情。这样,应用程序可以根据需要定义和翻译数据的意义,还可以进行编码和加密,安全性也大为提高。而且,操作系统不管语义,其所要维护的信息就很少,设计起来简单,可靠性自然也就更高。

到这里,读者应该可以看出来哪一种方式最受欢迎了吧。没错,就是字节流方式。因为它简单,而追求简单正是操作系统设计的努力方向。现代的商业操作系统基本上都使用字节流方式来组织文件内容。历史上曾经出现过关系导向型文件系统,例如,VMS的文件系统就是以记录流方式存放的。

也许有读者会问,既然越简单越好,那为什么不采用字位流呢?字位不是比字节更简单吗?是的,字位听上去比字节更简单,但这是从逻辑上看。从计算机物理现实看,情况就不是这样了。因为通用计算机的寻址最小单位是字节(有的支持半字节寻址,所谓的nibble addressing,有些嵌入式操作系统则支持字位寻址,但本书仅讨论通用计算机),而不是字位。对于计算机来说,读取一个字位比读取一个字节困难得多。因此,从计算机的角度来看,字节是最为简单的了。

爱因斯坦说的话里面的后半句是“但没有更简单”,对于字位来说,它就是比简单还简单,这样反而不行。

总体来说,字节流的文件系统的好处是更加方便、操作系统的代码更加可靠、更加的灵活、用户程序编写也更加方便


例如,用户程序可以对数据进行编码。如果用户不想让别人读懂文件内容,就可以对文件进行加密,而加密和编码丝毫不会影响操作系统对文件的读写。这些优势皆是关系导向型组织方式所缺乏的。



总结


  • 现代的商业操作系统基本上都使用字节流方式来组织文件内容
    ps
  • 什么是字节流?

推荐阅读
  • 河北省工业和信息化厅公文收发管理系统
    河北省工业和信息化厅及其下属各地市工信管理部门之间的文件传输主要依赖于纸质或电子邮件方式,这种方式存在效率低下、安全性差等问题。为了解决这些问题,省工信厅计划开发一套公文收发管理系统,实现文件的电子化和统一管理。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • Win10 周年更新 14393.1737 的详细内容与改进
    尽管今天不是常规的周二补丁日,微软依然发布了 Win10 周年更新 14393.1737 和 Win10 创意者更新 15063.632。本文将详细介绍 Win10 周年更新 14393.1737 的主要更新内容。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
author-avatar
mobiledu2502909745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有