已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/5/1,1,第七章输入/输出,流的概念流的分类文件随机存取文件对象串行化JavaNIO,2020/5/1,2,7.1流式输入/输出,什么是流?流是从源到目的地的字节的有序序列。,2020/5/1,3,7.1流式输入/输出,流的特点流是一种顺序存取方式流中的字节依据先进先出,具有严格顺序,2020/5/1,4,7.1流式输入/输出,流的操作读操作写操作,2020/5/1,5,7.1流式输入/输出,流的分类根据流相对于程序的另一个端点的位置节点流过滤流根据流中的数据单位不同字节流字符流根据流的读写操作输入流输出流,2020/5/1,6,7.1流式输入/输出,流的分类根据流相对于程序的另一个端点的位置节点流:过滤流:,以特定源为端点构造的输入输出流,它是一种最基本的流。,以其他已经存在的流为端点构造的输入输出流,也称为处理流,2020/5/1,7,7.1流式输入/输出,流的分类根据流的读写操作输入流:输出流,可以从中读取数据的流称为输入流,可以向其中写入数据的流称为输出流,2020/5/1,8,7.1流式输入/输出,流的分类根据流中的数据单位不同字节流字符流,流中的数据以8位字节为单位进行读写,以InputStream与OutputStream为基础类,流中的数据以16位字符为单位进行读写,以Reader与Writer为基础类,2020/5/1,9,字符流,字符流处理以字符为单位进行的读写操作。字符流处理的信息是基于文本的信息字符流支持Unicode中的任何字符Reader和Writer是处理字符流的两个基本类java.io包中所有以“Reader”和“Writer”结尾的类都是处理字符流的类。,2020/5/1,10,字符流类型的输入流,2020/5/1,11,字符流类型的输出流,2020/5/1,12,字节流,字节流处理以字节为单位进行的数据读写操作InputStream和OutputStream是处理字节流的两个基本类java.io包中的所有以InputStream和OutputStream结尾的类都是处理字节流的类,2020/5/1,13,字节流类型的输入流,2020/5/1,14,字节流类型的输出流,2020/5/1,15,InputStream,java.lang.Objectjava.io.InputStreampublicabstractclassInputStreamextendsObjectimplementsCloseable此抽象类是表示字节输入流的所有类的超类。需要定义InputStream子类的应用程序必须总是提供返回下一个输入字节的方法。,2020/5/1,16,InputStream,构造方法publicInputStream()Inputstream类和Outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。,2020/5/1,17,InputStream类中的方法,类中声明的方法:abstractintread()从输入流中读取数据的下一个字节。intread(byteb)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。intread(byteb,intoff,intlen)将输入流中最多len个数据字节读入byte数组。,2020/5/1,18,InputStream类中的方法,类中声明的方法:intavailable()返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。voidclose()关闭此输入流并释放与该流关联的所有系统资源。longskip(longn)跳过和丢弃此输入流中数据的n个字节。,2020/5/1,19,InputStream类中的方法,类中声明的方法:voidreset()将此流重新定位到最后一次对此输入流调用mark方法时的位置。voidmark(intreadlimit)在此输入流中标记当前的位置。booleanmarkSupported()测试此输入流是否支持mark和reset方法。,2020/5/1,20,OutputStream,publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。需要定义OutputStream子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。,2020/5/1,21,OutputStream,构造方法publicOutputStream()Inputstream类和Outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。,2020/5/1,22,OutputStream,类中的成员方法voidclose()关闭此输出流并释放与此流有关的所有系统资源。voidflush()刷新此输出流并强制写出所有缓冲的输出字节。voidwrite(byteb)将b.length个字节从指定的byte数组写入此输出流。voidwrite(byteb,intoff,intlen)将指定byte数组中从偏移量off开始的len个字节写入此输出流。abstractvoidwrite(intb)将指定的字节写入此输出流。,2020/5/1,23,标准的输入输出流,java.lang.Object|+-java.lang.SystemstaticPrintStreamerr标准错误输出流staticInputStreamin标准输入流staticPrintStreamout标准输出流,2020/5/1,24,PrintStream类,java.lang.Object|+-java.io.OutputStream|+-java.io.FilterOutputStream|+-java.io.PrintStream,2020/5/1,25,标准输入流in,Java的标准输入System.in是InputStream类的对象从键盘读入数据Charch=System.in.read()注意:必须对IOException异常进行处理返回的是16位整数值,低位字节是真正输入的数据,高位字节全是零System.in.read()的执行将使整个程序被挂起,直到用户从键盘输入数据才继续运行,2020/5/1,26,标准输出流out,Java的标准输出System.out.是打印输出流PrintStream类的对象。voidprint(booleanb)打印boolean值。voidprintln()通过写入行分隔符字符串终止当前行。实例7-5,2020/5/1,27,流的套接,数据源,FileInputStream,BufferedInputStream,DataInputStream,DataOutputStream,BufferedOutputStream,FileOutputStream,数据源,输入流,输出流,2020/5/1,28,文件流,文件流是节点流FileInputStream以字节为单位从文件中输入数据FileOutputStream以字节为单位输出数据到文件中FileReader以字符为单位读取文件数据FileWriter以字符为单位写数据到文件中例7-1通过文件字节流实现文件的复制例7-2通过文件字符流实现文本文件的复制,2020/5/1,29,数据流,如果要读取与机器无关的基本数据类型的数据,如整型或浮点型的二进制数,就要用到二进制数据文件流。类java.io.DataInputStream和java.io.DataOutputStream提供读取和写出基本数据类型的数据通常运用类DataInputStream读取运用类DataOutputStream写出的数据,2020/5/1,30,数据流,实际使用中,类DataInputStream和DataOutputStream必须和一个输入类(InputStream)或输出类(OutputStream)联接起来,不能直接用文件名或文件对象(File)对其直接初始化,例如:FileOutputStreamf=newFileOutputStream(data);DataOutputStreamdf=newDataOutputStream(f);例7-4数据流示例,2020/5/1,31,缓存流,缓存流把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出,通过减少系统资源的读写次数来加快程序的执行缓存流是过滤流创建缓存流需要给出一个前端流,并可指明缓冲区的大小缓存流包括BufferedInputStream/BufferedOutputStreamBufferedReader/BufferedWriter,2020/5/1,32,缓存流,构造方法:publicBufferedInputStream(InputStreamin)publicBufferedInputStream(InputStreamin,intsize)publicBufferedOutputStream(OutputStreamout)publicBufferedOutputStream(OutputStreamout,intsize),2020/5/1,33,管道流,管道用来把一个线程的输出连接到另一个线程的输入PipedReader/PipedInputStream实现管道的输入端;PipedWriter/PipedOutputStream实现管道的输出端管道流模型:,2020/5/1,34,将一个线程的输出流直接挂在另一个线程的输入流,建立管道,实现线程间数据交换。PipedInputStreampin=newPipedInputStream();PipedOutputStreampout=newPipedOutputStream(pin);PipedInputStreampin=newPipedInputStream();PipedOutputStreampout=newPipedOutputStream();pin.connect(pout);或pout.connect(pin)。,管道流的创建,2020/5/1,35,管道流示例,例7-3管道流使用示例Rhymingwords.java,输入一组单词,先将每个单词逆序,再将所有单词排序,最后将这些单词逆序输出。程序处理流程:,2020/5/1,36,示例中的管道流,2020/5/1,37,文件,文件对象File的创建FilemyFile;myFile=newFile(“mymotd”);myFile=newFile(“”,“mymotd”);文件对象File的操作文件名的操作文件信息测试获取一般信息与常用操作目录操作,2020/5/1,38,文件,文件名操作StringgetName()StringgetPath()StringgetAbsolutePath()StringgetParent()booleanrenameTo(FilenewName),2020/5/1,39,文件,文件信息测试booleanexists()booleancanWrite()booleancanRead()booleanisFile()booleanisDirectory()booleanisAbsolute()获取文件一般信息与常用操作目录操作注:具体方法查阅JDK6.0API文档实例7-6,2020/5/1,40,7.3随机存取文件,顺序存取文件Java中的流都是按顺序方式访问随机存取文件可随机读写操作所谓随机读写,是指读写完上一个字节后,不只能读写其后继的字节,还可以读写文件中任意的字节,就好象文件中有一个随意移动的指针一样。,2020/5/1,41,7.3随机存取文件,RandomAccessFile类同时具有类DataInputStream和类DataOutputStream的功能类RandomAccessFile实现了接口DataInput和DataOutput类DataInputStream实现了接口DataInput类DataOutputStream实现了接口DataOutput,2020/5/1,42,类RandomAccessFile的层次结构,java.lang.Object|+-java.io.RandomAccessFilepublicclassRandomAccessFileextendsObjectimplementsDataOutput,DataInput;,2020/5/1,43,RandomAccessFile的构造方法,RandomAccessFile(Filefile,Stringmode)创建一个随机存取文件流,从file指定的文件读取数据,是否可写由mode声明。RandomAccessFile(StringfileName,Stringmode)创建一个随机存取文件流,从文件名为fileName的文件读取数据,是否可写由mode声明。,2020/5/1,44,RandomAccessFile提供的操作,文件指针的操作读操作写操作例7-7利用随机存取文件方式显示程序源码,2020/5/1,45,7.4对象的串行化,什么是对象的串行化?将Java程序中的对象保存在外存中,称为对象永久化对Java对象的读写过程称为对象串行化为什么要进行对象的串行化?Java远程方法调用RMI对象永久化保存程序中的对象,2020/5/1,46,7.4对象的串行化,对象串行化的方法把对象写到对象输出流Publicf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论