您所在的位置: 首页>>读书频道>>设计开发>>Java系列>>

10.1 处理文件和目录

http://book.51cto.com  2007-11-15 11:57  [美] Hal Fulton著 陈秋萍等译  人民邮电出版社  我要评论(0)

第10章 I/O和数据存储

计算机擅长计算,该含义比看起来深奥。如果只需坐在计算机前,并在需要时使用CPU周期和引用RAM,生活就太轻松了。

然而,只独自思考的计算机没多大用途,用户迟早需要输入信息并让计算机输出信息,这使生活变得复杂起来。

几个因素导致I/O非常复杂。首先,输入和输出是两码事,但被视为一个整体。其次,I/O操作(及其用法)变化多端,就像昆虫物种一样。

历史上使用过各种设备,如圆桶、纸带、磁带、打孔卡和电传打字机等。有些是机械设备,其他的是电磁设备;有些是只读的,有些是只写或可读写的;有些可写介质是可擦除的,其他的则不能。有些设备是顺序存取的,有些是随机存取的;有些介质是永久性的,其他的是暂时或易失的;有些设备需要人工干预,其他的不需要;有些是面向字符的,其他的是面向块的;有些块设备是长度固定的,其他的则是长度可变的;有些设备被轮询,其他的是中断驱动的。中断可通过硬件、软件或两者来实现。有缓冲I/O和非缓冲I/O。有内存映射的I/O和面向通道的I/O,而随着UNIX等操作系统的出现,I/O设备被映射到文件系统中的文件。可用机器语言、汇编语言或高级语言处理I/O。有些语言提供了I/O功能,而有些语言的规范根本没有涉及I/O。执行I/O操作时,可使用设备驱动程序和抽像层,也可以不使用。

如果这些显得混乱,那是因为它们原本就如此。这种复杂性部分源于输入/输出概念固有的特征,部分源于设计时做出的权衡,部分源于计算机科学的传统和惯例及各种语言和操作系统的独特性。

由于I/O通常很复杂,因此Ruby中的I/O也很复杂,但本章将尽量使其容易理解,并概述各种技术的用法以及在什么情况下使用它们。

IO类是所有Ruby I/O的核心,它定义了每种输入/输出操作的行为。和IO密切相关(并继承它)的是File类,File内嵌了一个Stat类,后者封装了程序员可能需要查看的有关文件的各种细节(如权限和时间戳)。方法stat和lstat返回类型为File::Stat的对象。
模块FileTest也提供了可用于检测这些属性的方法,该模块被混合插入到File类中,它也可独立使用。
最后,Kernel模块也有I/O方法,该模块被混合插入到Object(它是包括类在内的所有对象的祖先)中。程序员总是可使用这些简单的I/O例程,而不用考虑它们的接受方是谁。这些方法默认使用标准输入和标准输出。

初学者可能发现这些类很乱,它们的功能重叠。好消息是,通常只需使用该框架的一小部分。

在更高层次上,Ruby提供了持久化对象的特性。使用Marshal可执行简单的对象序列化,更复杂的PStore库是基于Marshal的,将在同一节中介绍它们和DBM库,虽然DBM库是基于字符串的。

在最高层次上,可通过独立的数据库管理系统(如MySQL和Oracle)来访问数据。这个主题很复杂,足够编写一本或多本专著。本章只概述让程序员入门的知识,在有些情况下,作者将提供在线文档链接。

10.1  处理文件和目录

文件通常指的是磁盘文件,虽然并非总是如此。和其他编程语言中一样,Ruby中的文件概念是一种有意义的抽像,目录指的是Windows或UNIX系统中的目录。

File类同其父类IO紧密相关,Dir类和IO类的关系不那么紧密,但作者将文件和目录放在一起讨论,因为它们在概念上还是相关的。

【责任编辑:雪花 TEL:(010)68476606】

回书目   上一节   下一节
深入Vista应用程序开发
最优性价比组建无线网络
网络应用性能控管最佳实践
如何有效提升企业安全审计应用水平
华硕IDC绿色节能服务器推荐
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有