《Java程序设计基础》第10章:输入输出系统.ppt
《《Java程序设计基础》第10章:输入输出系统.ppt》由会员分享,可在线阅读,更多相关《《Java程序设计基础》第10章:输入输出系统.ppt(48页珍藏版)》请在三一办公上搜索。
1、第10章 输入输出系统,学习重点:输入输出的总体结构 流的概念构建不同的流,第10章 输入输出系统,10.1 输入输出流的概述 10.2 各种流的使用 文件流 管道流 连接文件 过滤流 对象的序列化 随机访问 10.3 练习题,10.1 输入输出流的概述,Java的输入和输出多以流的方式进行的,它的特点是数据的发送和获取都是延数据序列顺序进行的,每个数据必须等待它前面的数据发送或读入后才能被读写。,当需要读入数据时,程序先从数据的来源(文件、网络等)打开一个流,然后从这个流中顺序读取数据当要输出数据时,程序打开一个流,通过这个流向输出目标顺序写入数据,1.Character流,Characte
2、r流以Reader(对应输入)和Writer(对应输出)两个类族来实现,其中Reader和Writer是输入和输出族的根类,2.Byte流,传输8位的数据就应用 Byte流,Java库中用InputStream(输入)和OutputStream(输出)类族中的类来实现8位数据的传输,这些类主要用来传输二进制数据,如声音和图像,ObjectInputStream ObjectOutputStreamy用来传输对象序列。,3.关于IO的根类,Reader含有以下读取字符和字符数组的方法:int read()int read(char cbuf)int read(char cbuf,int offs
3、et,int length)而InputStream定义了读取byte型数据的方法如下: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)OutputStream方法如下:int write(int c)int write(byte cbuf)int write(byte cbuf,int offset,int length)
4、,4.各种流简介,表10.1列出了java.io包中的各种流和它们的功能。注意,这些流都能传输char和byte,两种不同的数据类型。表10.1,10.2 各种流的使用,10.2.1 文件流 文件流(File streams)是用来传输当前系统下的某个文件中的一些内容的,它应该是最简单的一种流,它可以是以下几种流类的对象:FileReader,FileWriter,FileInputStream和FileOutputStream。,例10.1 使用File Reader和File writer的文件复制,这个例子就是把partnovel.txt的内容传输到target.txt中,这两个文件都在
5、本机的e:files中。程序代码,例10.2 使用InputStream和OutputStream的文件复制,程序代码两个方法复制同样一段文件内容,每次读取的内容是不一样的,FileReader每次读取的是一个字符(charactor),而屏幕中显示的是这个字符的编码(0到65 535之间的一个整数)。而FileInputStream每次读取的是一个字节(byte),而屏幕中显示的是这个字节的编码(0255之间的一个整数)。,10.2.2 管道流,管道流(Pipe Streams)是把一个线程的输出作为另一个线程的输入。实现它的是PipedReader、PipedWriter、PipedInp
6、utStream和PipedOutputStream。,管道流(Pipe Streams)的作用,如果定义了一个类,用来实现对一组词的操作,其中的一个操作是按它们的韵(词尾)排序,方法是先把这些词的字序逆转(reverse(),然后把逆转后的词排序(sort(),最后再逆转每个词(reverse(),这样就得到这些词的韵的排序。,如果不用管道流,这个操作过程必须存储两个中间过程,即经过第一次reverse()后得到的词表和经过sort()之后的词表。如图所示,Reverse,Reverse,Sort,List ofWords,List ofReversedWords,List ofRevers
7、edSorted Words,List ofRhymingWords,而如果用管道流,把一个方法的输出作为另一个方法的输入,就不需要中间的存储文件了,当然这时必须用多个线程同时运行,即revers(),sort()和reverse()一起工作,并且把中间的存储文件用管道流来代替。如图所示。,List ofWords,List ofRhymingWords,例10.3 对词汇的韵排序,这个例子中一共定义了3个类,主要的流程结构定义在RhymingWords类中,它是这个程序的主类,另外,我们还定义了ReverseThread和SortThread两个线程,它们的工作就是分别执行上图中指出的rev
8、erse和sort的动作,,(1)ReverseThread的作用是执行将单词的字母顺序逆转过来的动作,源代码如下:,程序代码这个线程对读入的每一行数据调用了reverseIt()方法,并将逆转完毕的单词输出到一个OutputStream类对象中去。注意,在这段程序中,我们只使用了普通的输入输出流。,(2)SortThread的作用是对单词进行排序,其源代码如下:程序代码(3)RhymingWords类控制着整个程序的流程:程序代码,对于管道流的使用主要体现在粗体的代码段,如reverse()方法中的语句:,PipedWriter pipeOut=new PipedWriter();Piped
9、Reader pipeIn=new PipedReader(pipeOut);以上的两句作用是建立一个管道,管道的一头是PipedWriter,另一头是PipedReader,并且,任何从PipedWriter写入的内容都可以从PipedReader读出。形成这个管道的过程就是在一个PipedReader上建立一个PipedWriter。管道流和文件流的主要区别是文件流必须建立在一个文件上,而管道流是在两个线程之间建立管道,而不是建立在某个文件或线程上。所以,管道流的建立过程是先创建一个空的PipedWriter,然后在PipedWriter上创建PioedReader。程序运行时Revers
10、e线程把内容输入到管道的PipedWriter端,Sort线程从管道的PipedReader端读出如图所示。sort()方法中的管道流同样,只是使用管道的线程不同而已。PipedwriterPipedReaberReversebortThe Pipe管道的连接,快排序的算法,/这是一个快排序的方法,它的思路是先设一个中间点,然后通过左右对调/把值小于中间点的元素放到中间点的左边,值大于中间点的元素放到右边/然后对左右两部分重复以上算法,直到完成排序,所以这是一个递归算法假设Words.txt文件中的内容如下:innewBufferedWritersourcePipepipeOutPipedWr
11、iterhiflowerairplanecomputernetworkstoppcgamenew,程序代码,输出结果如图所示,10.2.3 连接文件,如果需要读取多个文件,并把它们连接在一起,就需要流类SequenceInputStream。,例10.4 用一个流读取多个文件并连接,程序首先创建一个ListOfFiles类的对象myList来存放命令行输入的多个文件名,然后创建一个SequenceInputStream对象,它将按myList指示的顺序读取多个文件并将它们连接。程序代码,10.2.4 过滤流,java.io包中提供了一个类族,这些类实现过滤输入输出,这些类的根类是FilterI
12、nputStream和FilterOutputStream,它们是抽象类。当使用过滤流时,比一般流多一道工序,就是过滤。过滤流是建筑在其他流之上的,如过滤流的方法read()从下层流中读取数据,并过滤后传给程序,而write()方法是先过滤后,再把数据写入下层流。,FilterInputStream和FilterOutputStream的子类如下:,DataInputStream 和 DataOutputStream BufferedInputStream 和 BufferedOutputStream LineNumberInputStream PushbackInputStream Prin
13、tStream,1.使用过滤流,要使用过滤流必须使它附加在其他流上,可以在一个标准的输入流上附加一个过滤输入流,例如:BufferedReader d=new BufferedReader(new DataInputStream(System.in);String input;while(input=d.readLine()!=null),例10.5 使用DataInputStream和DataOutputStream进行过滤输入输出,这个程序的结构是,首先给出一系列数据,然后把这些数据通过过滤流输出到一个文件中,最后再从文件中读到屏幕上。程序代码,2.定义自己的过滤流,许多时候我们需要特殊的
14、过滤方式,而在Java类库中没有所需的过滤流,这时就必须自己定义。定义自己的过滤流应注意以下几点:过滤流应该是DataInputStream和DataOutputStream的子类,而且经过过滤的数据其他方法不能读出。一般情况下,输入和输出是成对出现的,所以一次定义两个流(输入、输出)。如果需要,重载read()和write()。可以定义其他的特殊方法完成过滤。确保输入和输出流一起工作。,例10.6 创建自己的过滤流,这个例子的名字为CheckSum,其作用是判断从输入流中读入的数据是否与从输出流中写入的数据相符,通过这个程序,可以实现在IO方面的多种检查算法,以保证输入流与输出流之间的一致,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序设计基础 Java 程序设计 基础 10 输入输出 系统
链接地址:https://www.31ppt.com/p-5896131.html