中国电脑教育报/2008年/11月/3日/第G03版教育生活?考试培训
Java畅通精通I/O
高军
许多参加
计算机二级Java考试的考生都曾抱怨Java语言的I/O机制太过复杂,一大堆的接口和类,让人看着有些头晕,不知道该如何下手。可偏偏I/O又是Java语言的非常重要的组成部分,并且也是历次考试的重点。笔者对近几年二级Java考试中对I/O知识考查的状况作了一下统计(如表)。
考生们可以看出,在最近的这8次考试中,对I/O知识点的考查共有22处,平均每次考试近三处,其中2005年9月,2007年9月这两次考试中对I/O知识点的考查均达到4处之多,I/O在二级Java考试中的地位,可见一斑!因此,熟练掌握Java的I/O知识对顺利过关有着极其重要的作用。其实,要想弄清Java语言的I/O机制一点也不难。我们先来给Java的I/O归归类。JavaI/O里最基础的是四个抽象类:InputStream,OutputStream,Reader,Writer,其中Stream读取的是单字节,它将数据读取到byte[]里面。Reader,Writer读取的是实际的字符。这样,两个大类就出来了:读取字节的XXXStream类与读取实际字符的XXXer类。接下来,我只要把上述两个类的XXX前缀换成我们常见的有Buffered,File等,那么整个Java的I/O功能就出来了,如:BufferedInputStream是提供缓冲功能支持的读取字节码的类,FilelnputStream是从文件读取字节码的类,而FileReader是通过字符流读取文件等。弄清上述细节之后,做题当然就不成
问题了,
第1页共3页
如:(2008年9月选择题第15题)Reader类所处理的是:A.字符流B.字节流c.文件流D管道流(2005年9月选择题24题)下列叙述中,正确的是:A.Reader是一个读取字符文件的接口。B.Reader是一个读取数据文件的抽象类。c.Reader是一个读取字符文件的抽象类。D.Reader是一个读取字节文件的一般类。(2007年9月选择题24题)下列类中属于字节输入抽象类的是:A.FileInputStrearnB.ObjectInputStreamC.FilterInputStreamD.InputStream.根据上面的分析,Reader是处理字符的抽象类,它不是什么接口;InputStream是处理字节的抽象类,因此,上述三道真题的答案依次是A、C、D。再如:(2007年4月填空第12题)在Java.io包中,字符输出流类都是一类的子类。刚才我们曾经提到用于写入字符流的抽象类Writer,所有字符输出流都继承于它,因此也都是它的子类。关于考查Java语言I/O中各种数据流的基本概念和继承关系的考题还有很多,均和上述分析的例题类似,如2007年4月选择题第22题,2005年4月选择题第26题,填空第12题等。由此考生朋友可以看出,明晰数据流的两大分类和它们之间的继承关系是考试得分的关键。接下来,考生还要明确Java的I/O机制的另一特点,那就是层层包装。有了前述四个最基本的抽象类之后,我们就可以按照实际需要,把相关的功能一层一层给它包装上去,就行了。比如,我想实现缓冲功能,以加速文件的访问速度,就可以这样:BufferedOutputStreambout=newBufferedOutputStream(newFileOutputStream(newFile(“test.txt”));这里,FileOutputStream()是在整个包装的最底层,它可以直接和具体的文件打交道。再看下面的例题:(2005-4选择题18题)在读字符文件Employee.dat时,使用该文件作为参数的类是A.BufferReaderB.DatalnputStreamC.DataOutoutStreamD.FileInputStream显然该题答案是D,其他几个选项,只是包装流的外层,它们需要的参数是XXXStream,而不是具体的文件。再比如下题:(2007年9月选择题28题)阅读下面
程序:importJava.io.*;pubicclassByteStreamTest{pubicstaticvoidmain(String[]s){int[]myArray={10,20,30,40};try{DataOutputStreamdos=newDataOutputStream(new(“ints.dat”));for(inti=O;i
xml:namespace prefix = myArray.1ength;i++)dos.writeInt(myArray[i]);dos.close() />
第2页共3页
catch(IOExceptionioe){System.out.println(“IOExpertion”);}}}为保证程序正确运行,在程序中下划线处应填入的代码是A.FileOutputStreamB.ByteArrayOutputStreamC.BufferedOutputStreamD.FileWriter静下心来仔细观察这道题,DataOutputStream是外层包装,它需要一个能够直接访问文件的流对象来做参数,显然只有FileOutputStream合适,故答案是A。经过这样一翻梳理,考生朋友对Java的I/O机制肯定有了更深刻的认识,相信在考试中再遇到类似的考查,就不会束手无策了吧。(完)