《Java程序设计基础》第10章:输入输出系统.ppt
《《Java程序设计基础》第10章:输入输出系统.ppt》由会员分享,可在线阅读,更多相关《《Java程序设计基础》第10章:输入输出系统.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章章 输入输出系统输入输出系统学习重点:学习重点:l输入输出的总体结构输入输出的总体结构 l流的概念流的概念l构建不同的流构建不同的流第第10章章 输入输出系统输入输出系统 10.110.1 输入输出流的概述输入输出流的概述 10.210.2 各种流的使用各种流的使用 文件流文件流 管道流管道流 连接文件连接文件 过滤流过滤流 对象的序列化对象的序列化 随机访问随机访问 10.310.3 练习题练习题 10.1 输入输出流的概述输入输出流的概述 Java Java的输入和输出多以流的方式进行的,它的特点是数据的发送的输入和输出多以流的方式进行的,它的特点是数据的发送和获取都是延数据序列
2、顺序进行的,每个数据必须等待它前面的数和获取都是延数据序列顺序进行的,每个数据必须等待它前面的数据发送或读入后才能被读写。据发送或读入后才能被读写。l当需要读入数据时,程序先从数据的来源当需要读入数据时,程序先从数据的来源(文件、网络等文件、网络等)打开一个流,打开一个流,然后从这个流中顺序读取数据然后从这个流中顺序读取数据l当要输出数据时,程序打开一个流,通过这个流向输出目标顺序写入数当要输出数据时,程序打开一个流,通过这个流向输出目标顺序写入数据据1.Character流流 Character Character流以流以Reader(Reader(对应输入对应输入)和和Writer(Wri
3、ter(对应输出对应输出)两个类族来实现,两个类族来实现,其中其中ReaderReader和和WriterWriter是输入和输出族的根类是输入和输出族的根类 ReaderBufferedReaderCharArrayReaderInputStreamReaderFilterReaderPipedReaderStringReaderLineNumberReaderFileReaderPushbackReaderWriterBufferedwriterCharArraywriterOutputStreamReaderFilterWriterPipedWriterStringWriterFilte
4、rWriterFileWriter2.Byte流流 传输传输8 8位的数据就应用位的数据就应用 Byte流,流,JavaJava库中用库中用InputStream(输入输入)和和OutputStream(输出输出)类族中的类来实现类族中的类来实现8 8位数据的传输,这些类主要用来位数据的传输,这些类主要用来传输二进制数据,如声音和图像,传输二进制数据,如声音和图像,ObjectInputStream ObjectOutputStreamyObjectOutputStreamy用来传输对象序列。用来传输对象序列。3.3.关于关于IOIO的根类的根类Reader含有以下读取字符和字符数组的方法含有
5、以下读取字符和字符数组的方法:int read()int read(char cbuf)int read(char cbuf,int offset,int length)而而InputStream定义了读取定义了读取bytebyte型数据的方法如下:型数据的方法如下:int read()int read(byte cbuf)int read(byte cbuf,int offset,int length)Writer方法如下:方法如下:int write(int c)int write(char cbuf)int write(char cbuf,int offset,int length)Ou
6、tputStream方法如下:方法如下:int write(int c)int write(byte cbuf)int write(byte cbuf,int offset,int length)4.4.各种流简介各种流简介表表10.110.1列出了列出了java.io包中的各种流和它们的功能。注意,这些流都能传输包中的各种流和它们的功能。注意,这些流都能传输char和和bytebyte,两种不同的数据类型。,两种不同的数据类型。l表表10.110.110.2 各种流的使用各种流的使用10.2.1 文件流文件流 文件流文件流(File streams)是用来传输当前系统下的某个文件中的一些内容
7、是用来传输当前系统下的某个文件中的一些内容的,它应该是最简单的一种流,它可以是以下几种流类的对象:的,它应该是最简单的一种流,它可以是以下几种流类的对象:FileReader,FileWriter,FileInputStream和和FileOutputStream。例例10.1 10.1 使用使用File Reader和和File writer的文件复制的文件复制 这个例子就是把这个例子就是把partnovel.txt的内容传输到的内容传输到target.txt中,这两个中,这两个文件都在本机的文件都在本机的e:files中。中。l程序代码程序代码例例10.2 10.2 使用使用InputSt
8、ream和和OutputStream的文件复制的文件复制l程序代码程序代码l两个方法复制同样一段文件内容,每次读取的内容是不一样的,两个方法复制同样一段文件内容,每次读取的内容是不一样的,FileReader每次读取的是一个字符每次读取的是一个字符(charactor),而屏幕中显示的是这个,而屏幕中显示的是这个字符的编码字符的编码(0到到65 535之间的一个整数之间的一个整数)。而。而FileInputStream每次读取的每次读取的是一个字节是一个字节(byte),而屏幕中显示的是这个字节的编码,而屏幕中显示的是这个字节的编码(0255之间的一之间的一个整数个整数)。10.2.2 管道流
9、管道流 管道流管道流(Pipe Streams)是把一个线程的输出作为另一个线程的输是把一个线程的输出作为另一个线程的输入。实现它的是入。实现它的是PipedReader、PipedWriter、PipedInputStream和和PipedOutputStream。管道流管道流(Pipe Streams)(Pipe Streams)的作用的作用 如果定义了一个类,用来实现对一组词的操作,其中的一个操作是按它如果定义了一个类,用来实现对一组词的操作,其中的一个操作是按它们的韵们的韵(词尾词尾)排序,方法是先把这些词的字序逆转排序,方法是先把这些词的字序逆转(reverse(),然后把逆,然后把
10、逆转转后的词排序后的词排序(sort(),最后再逆转每个词,最后再逆转每个词(reverse(),这样就得到这些词,这样就得到这些词的的韵的排序。韵的排序。如果不用管道流,这个操作过程必须存储两个中间过程,即经过第一如果不用管道流,这个操作过程必须存储两个中间过程,即经过第一次次reverse()reverse()后得到的词表和经过后得到的词表和经过sort()sort()之后的词表。如图所示之后的词表。如图所示ReverseReverseSortList ofWordsList ofReversedWordsList ofReversedSorted WordsList ofRhymingW
11、ords而如果用管道流,把一个方法的输出作为另一个方法的输入,就不需而如果用管道流,把一个方法的输出作为另一个方法的输入,就不需要中间的存储文件了,当然这时必须用多个线程同时运行,即要中间的存储文件了,当然这时必须用多个线程同时运行,即reversrevers()(),sort()sort()和和reverse()reverse()一起工作,并且把中间的存储文件用管道流一起工作,并且把中间的存储文件用管道流来代替。如图所示。来代替。如图所示。List ofWordsList ofRhymingWordsReverseReverseSort例例10.3 对词汇的韵排序对词汇的韵排序 这个例子中一
12、共定义了这个例子中一共定义了3 3个类,主要的流程结构定义在个类,主要的流程结构定义在RhymingWordsRhymingWords类类中,它是这个程序的主类,另外,我们还定义了中,它是这个程序的主类,另外,我们还定义了ReverseThreadReverseThread和和SortThreadSortThread两个线程,它们的工作就是分别执行上图中指出的两个线程,它们的工作就是分别执行上图中指出的reversereverse和和sortsort的动作,的动作,(1)ReverseThread的作用是执行将单词的字母顺序逆转过来的的作用是执行将单词的字母顺序逆转过来的动作,源代码如下:动作
13、,源代码如下:l程序代码程序代码l这个线程对读入的每一行数据调用了这个线程对读入的每一行数据调用了reverseIt()方法,并将逆转方法,并将逆转完毕的单词输出到一个完毕的单词输出到一个OutputStream类对象中去。注意,在这段类对象中去。注意,在这段程序中,我们只使用了普通的输入输出流。程序中,我们只使用了普通的输入输出流。(2)SortThread的作用是对单词进行排序,其源代码如下:的作用是对单词进行排序,其源代码如下:l程序代码程序代码(3)(3)RhymingWords类控制着整个程序的流程类控制着整个程序的流程:l程序代码程序代码对于管道流的使用主要体现在粗体的代码段,如对
14、于管道流的使用主要体现在粗体的代码段,如reverse()reverse()方法中的方法中的语句:语句:PipedWriter pipeOut=new PipedWriter();PipedReader pipeIn=new PipedReader(pipeOut);l以上的两句作用是建立一个管道,管道的一头是PipedWriter,另一头是PipedReader,并且,任何从PipedWriter写入的内容都可以从PipedReader读出。形成这个管道的过程就是在一个PipedReader上建立一个PipedWriter。管道流和文件流的主要区别是文件流必须建立在一个文件上,而管道流是在两
15、个线程之间之间建立管道,而不是建立在某个文件或线程上。所以,管道流的建立过程是先创建一个空的PipedWriter,然后在PipedWriter上创建PioedReader。程序运行时Reverse线程把内容输入到管道的PipedWriter端,Sort线程从管道的PipedReader端读出如图所示。sort()方法中的管道流同样,只是使用管道的线程不同而已。PipedwriterPipedReaberReversebortThe Pipel管道的连接管道的连接PipedwriterPipedReaberReversebortThe Pipe快排序的算法快排序的算法/这是一个快排序的方法,它
16、的思路是先设一个中间点,然后通过左右对调/把值小于中间点的元素放到中间点的左边,值大于中间点的元素放到右边/然后对左右两部分重复以上算法,直到完成排序,所以这是一个递归算法假设Words.txt文件中的内容如下:innewBufferedWritersourcePipepipeOutPipedWriterhiflowerairplanecomputernetworkstoppcgamenewl程序代码程序代码输出结果如图所示输出结果如图所示10.2.3 连接文件连接文件 如果需要读取多个文件,并把它们连接在一起,就需要流类如果需要读取多个文件,并把它们连接在一起,就需要流类SequenceIn
17、putStream。例例10.4 10.4 用一个流读取多个文件并连接用一个流读取多个文件并连接l程序首先创建一个程序首先创建一个ListOfFilesListOfFiles类的对象类的对象myListmyList来存放命令行输来存放命令行输入的多个文件名,然后创建一个入的多个文件名,然后创建一个SequenceInputStreamSequenceInputStream对象,它对象,它将按将按myListmyList指示的顺序读取多个文件并将它们连接。指示的顺序读取多个文件并将它们连接。l程序代码程序代码10.2.4 过滤流过滤流 java.io包中提供了一个类族,这些类实现过滤输入输出,这
18、些类的根类包中提供了一个类族,这些类实现过滤输入输出,这些类的根类是是FilterInputStream和和FilterOutputStream,它们是抽象类。当使用过滤,它们是抽象类。当使用过滤流时,比一般流多一道工序,就是过滤。过滤流是建筑在其他流之上的,流时,比一般流多一道工序,就是过滤。过滤流是建筑在其他流之上的,如过滤流的方法如过滤流的方法read()从下层流中读取数据,并过滤后传给程序,而从下层流中读取数据,并过滤后传给程序,而write()方法是先过滤后,再把数据写入下层流。方法是先过滤后,再把数据写入下层流。FilterInputStream和和FilterOutputStre
19、am的子类如下:的子类如下:DataInputStream 和和 DataOutputStream BufferedInputStream 和和 BufferedOutputStream LineNumberInputStream PushbackInputStream PrintStream 1.1.使用过滤流使用过滤流 要使用过滤流必须使它附加在其他流上,可以在一个标准的输入要使用过滤流必须使它附加在其他流上,可以在一个标准的输入流上附加一个过滤输入流,例如:流上附加一个过滤输入流,例如:BufferedReader d=new BufferedReader(new DataInputSt
20、ream(System.in);String input;while(input=d.readLine()!=null)例例10.5 使用使用DataInputStream和和DataOutputStream进行过滤输入进行过滤输入输出输出 这个程序的结构是,首先给出一系列数据,然后把这些数据通过这个程序的结构是,首先给出一系列数据,然后把这些数据通过过滤流输出到一个文件中,最后再从文件中读到屏幕上。过滤流输出到一个文件中,最后再从文件中读到屏幕上。l程序代码程序代码 2.2.定义自己的过滤流定义自己的过滤流 许多时候我们需要特殊的过滤方式,而在许多时候我们需要特殊的过滤方式,而在JavaJa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序设计基础 Java 程序设计 基础 10 输入输出 系统
限制150内