违例匹配 2016年07月27日 48 阅读 违例匹配2007-05-28 yycnet.yeah.net yyc译“掷”出一个违例后,违例控制系统会按当初编写的顺序搜索“最接近”的控制器。一旦找到相符的控制器,就认为违例已得到控制,不再进行更多的搜索工作。在违例和它的控制器之间,并不需要非常精确的匹配。一个衍生类对象可与基础类的一个控制器相配,如下例所示://: Human.java// Catching Exception Hierarchiescl...
违例准则 2016年07月27日 47 阅读 违例准则2007-05-28 yycnet.yeah.net yyc译用违例做下面这些事情:(1) 解决问题并再次调用造成违例的方法。(2) 平息事态的发展,并在不重新尝试方法的前提下继续。(3) 计算另一些结果,而不是希望方法产生的结果。(4) 在当前环境中尽可能解决问题,以及将相同的违例重新“掷”出一个更高级的环境。(5) 在当前环境中尽可能解决问题,以及将不同的违例重新“掷”出一个更高级的环境。(6) ...
Java的IO系统 2016年07月27日 55 阅读 Java的IO系统2007-05-28 yycnet.yeah.net yyc译“对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。”由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的。其中最大的挑战似乎是如何覆盖所有可能的因素。不仅有三种不同的种类的IO需要考虑(文件、控制台、网络连接),而且需要通过大量不同的方式与它们通信(顺序、随机访问、二进制、字符、按行、按字等等)。Java库的设计者通过创建大量类来...
输入和输出 2016年07月27日 44 阅读 输入和输出2007-05-28 yycnet.yeah.net yyc译可将Java库的IO类分割为输入与输出两个部分,这一点在用Web浏览器阅读联机Java类文档时便可知道。通过继承,从InputStream(输入流)衍生的所有类都拥有名为read()的基本方法,用于读取单个字节或者字节数组。类似地,从OutputStream衍生的所有类都拥有基本方法write(),用于写入单个字节或者字节数组。然而,我们通常不会用到这些方法;它们之所以存在,是因为更复...
java的InputStream的类型 2016年07月27日 50 阅读 java的InputStream的类型2007-05-28 yycnet.yeah.net yyc译InputStream的作用是标志那些从不同起源地产生输入的类。这些起源地包括(每个都有一个相关的InputStream子类):(1) 字节数组(2) String对象(3) 文件(4) “管道”,它的工作原理与现实生活中的管道类似:将一些东西置入一端,它们在另一端出来。 (5) 一系列其他流,以便我们将其统一收集到单独一个流内。(6...
java的OutputStream的类型 2016年07月27日 47 阅读 java的OutputStream的类型2007-05-28 yycnet.yeah.net yyc译这一类别包括的类决定了我们的输入往何处去:一个字节数组(但没有String;假定我们可用字节数组创建一个);一个文件;或者一个“管道”。除此以外,FilterOutputStream为“破坏器”类提供了一个基础类,它将属性或者有用的接口同输出流连接起来。这将在以后讨论。表10.2 OutputStream的类...
增添属性和有用的接口 2016年07月27日 50 阅读 增添属性和有用的接口2007-05-28 yycnet.yeah.net yyc译利用层次化对象动态和透明地添加单个对象的能力的做法叫作“装饰器”(Decorator)方案——“方案”属于本书第16章的主题(注释①)。装饰器方案规定封装于初始化对象中的所有对象都拥有相同的接口,以便利用装饰器的“透明”性质——我们将相同的消息发给一个对象,...
通过FilterInputStream从InputStream里读入数据 2016年07月27日 43 阅读 通过FilterInputStream从InputStream里读入数据2007-05-28 yycnet.yeah.net yyc译FilterInputStream类要完成两件全然不同的事情。其中,DataInputStream允许我们读取不同的基本类型数据以及String对象(所有方法都以“read”开头,比如readByte(),readFloat()等等)。伴随对应的DataOutputStream,我们可通过数据&ldq...
通过FilterOutputStream向OutputStream里写入数据 2016年07月27日 48 阅读 通过FilterOutputStream向OutputStream里写入数据2007-05-28 yycnet.yeah.net yyc译与DataInputStream对应的是DataOutputStream,后者对各个基本数据类型以及String对象进行格式化,并将其置入一个数据“流”中,以便任何机器上的DataInputStream都能正常地读取它们。所有方法都以“wirte”开头,例如writeByt...
本身的缺陷:RandomAccessFile 2016年07月27日 42 阅读 本身的缺陷:RandomAccessFile2007-05-28 yycnet.yeah.net yyc译RandomAccessFile用于包含了已知长度记录的文件,以便我们能用seek()从一条记录移至另一条;然后读取或修改那些记录。各记录的长度并不一定相同;只要知道它们有多大以及置于文件何处即可。首先,我们有点难以相信RandomAccessFile不属于InputStream或者OutputStream分层结构的一部分。除了恰巧实现了DataInp...
目录列表器 2016年07月27日 50 阅读 目录列表器2007-05-28 yycnet.yeah.net yyc译现在假设我们想观看一个目录列表。可用两种方式列出File对象。若在不含自变量(参数)的情况下调用list(),会获得File对象包含的一个完整列表。然而,若想对这个列表进行某些限制,就需要使用一个“目录过滤器”,该类的作用是指出应如何选择File对象来完成显示。下面是用于这个例子的代码(或在执行该程序时遇到困难,请参考第3章3.1.2小节“赋值&rd...
检查与创建目录 2016年07月27日 49 阅读 检查与创建目录2007-05-28 yycnet.yeah.net yyc译File类并不仅仅是对现有目录路径、文件或者文件组的一个表示。亦可用一个File对象新建一个目录,甚至创建一个完整的目录路径——假如它尚不存在的话。亦可用它了解文件的属性(长度、上一次修改日期、读/写属性等),检查一个File对象到底代表一个文件还是一个目录,以及删除一个文件等等。下列程序完整展示了如何运用File类剩下的这些方法://: MakeDirec...
java的IO流的典型应用 2016年07月27日 47 阅读 java的IO流的典型应用2007-05-28 yycnet.yeah.net yyc译尽管库内存在大量IO流类,可通过多种不同的方式组合到一起,但实际上只有几种方式才会经常用到。然而,必须小心在意才能得到正确的组合。下面这个相当长的例子展示了典型IO配置的创建与使用,可在写自己的代码时将其作为一个参考使用。注意每个配置都以一个注释形式的编号起头,并提供了适当的解释信息。//: IOStreamDemo.java// Typical IO Stream C...
java的输入流 2016年07月27日 44 阅读 java的输入流2007-05-28 yycnet.yeah.net yyc译当然,我们经常想做的一件事情是将格式化的输出打印到控制台,但那已在第5章创建的com.bruceeckel.tools中得到了简化。第1到第4部分演示了输入流的创建与使用(尽管第4部分展示了将输出流作为一个测试工具的简单应用)。1. 缓冲的输入文件为打开一个文件以便输入,需要使用一个FileInputStream,同时将一个String或File对象作为文件名使用。为提高速度,最...
java的输出流 2016年07月27日 48 阅读 java的输出流2007-05-28 yycnet.yeah.net yyc译两类主要的输出流是按它们写入数据的方式划分的:一种按人的习惯写入,另一种为了以后由一个DataInputStream而写入。RandomAccessFile是独立的,尽管它的数据格式兼容于DataInputStream和DataOutputStream。5. 保存与恢复数据PrintStream能格式化数据,使其能按我们的习惯阅读。但为了输出数据,以便由另一个数据流恢复,则需用一...
java快捷文件处理 2016年07月27日 47 阅读 java快捷文件处理2007-05-28 yycnet.yeah.net yyc译由于以前采用的一些典型形式都涉及到文件处理,所以大家也许会怀疑为什么要进行那么多的代码输入——这正是装饰器方案一个缺点。本部分将向大家展示如何创建和使用典型文件读取和写入配置的快捷版本。这些快捷版本均置入packagecom.bruceeckel.tools中(自第5章开始创建)。为了将每个类都添加到库内,只需将其置入适当的目录,并添加对应的packa...
从标准输入中读取数据 2016年07月27日 52 阅读 从标准输入中读取数据2007-05-28 yycnet.yeah.net yyc译以Unix首先倡导的“标准输入”、“标准输出”以及“标准错误输出”概念为基础,Java提供了相应的System.in,System.out以及System.err。贯这一整本书,大家都会接触到如何用System.out进行标准输出,它已预封装成一个PrintStream对象。System.err同样是一个...
StreamTokenizer 2016年07月27日 41 阅读 StreamTokenizer2007-05-29 yycnet.yeah.net yyc译尽管StreamTokenizer并不是从InputStream或OutputStream衍生的,但它只随同InputStream工作,所以十分恰当地包括在库的IO部分中。StreamTokenizer类用于将任何InputStream分割为一系列“记号”(Token)。这些记号实际是一些断续的文本块,中间用我们选择的任何东西分隔。例如,我们...
StringTokenizer 2016年07月27日 45 阅读 StringTokenizer2007-05-29 yycnet.yeah.net yyc译尽管并不必要IO库的一部分,但StringTokenizer提供了与StreamTokenizer极相似的功能,所以在这里一并讲述。StringTokenizer的作用是每次返回字串内的一个记号。这些记号是一些由制表站、空格以及新行分隔的连续字符。因此,字串“Where is my cat?”的记号分别是“Where”...
Java 1.1的IO流 2016年07月27日 46 阅读 Java 1.1的IO流2007-05-29 yycnet.yeah.net yyc译到这个时候,大家或许会陷入一种困境之中,怀疑是否存在IO流的另一种设计方案,并可能要求更大的代码量。还有人能提出一种更古怪的设计吗?事实上,Java 1.1对IO流库进行了一些重大的改进。看到Reader和Writer类时,大多数人的第一个印象(就象我一样)就是它们用来替换原来的InputStream和OutputStream类。但实情并非如此。尽管不建议使用原始数据流库...