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

文件内容组织入门

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

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


1.关系导向型组织

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

在这里插入图片描述


2.非关系导向型组织

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



总结


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

推荐阅读
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何在QT框架中使用QWebSocket和QTcpSocket实现SSL加密通信,涵盖单向认证设置。单向认证常见于Web通信场景,其中客户端验证服务端证书,而服务端不验证客户端证书。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 南方CASS专题系列:全面教程、视频讲解与插件汇总
    本专题系列涵盖南方CASS的完整教程、详细视频讲解及实用插件,旨在帮助用户快速掌握该软件。南方CASS基于CAD平台开发,集成了地形图绘制、地籍管理、空间数据建库、工程应用和土石方计算等多项功能,广泛应用于测绘、工程等领域。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
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社区 版权所有