java之输入输出流.ppt
《java之输入输出流.ppt》由会员分享,可在线阅读,更多相关《java之输入输出流.ppt(200页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、输入输出流输入输出流什么是什么是“流流”?v流(流(stream)是一个信息的逻辑实体,它通是一个信息的逻辑实体,它通过过Java输入输入/输出系统与物理设备相连。输出系统与物理设备相连。v从源到目的地的从源到目的地的字节的有序序列字节的有序序列v流是指数据传输时的形态流是指数据传输时的形态v尽管与尽管与“流流”链接的物理设备不尽相同,链接的物理设备不尽相同,但是所有流的行为具有同样的方式。但是所有流的行为具有同样的方式。v最大特点是数据的获取和发送均最大特点是数据的获取和发送均按照顺序按照顺序进行进行。各种各种“流流”v数据流数据流:是指在计算机的输入输出之间运动的数是指在计算机的输入输出之
2、间运动的数据序列。据序列。u输入输出是相对程序来说的,程序扮演两个角色:源输入输出是相对程序来说的,程序扮演两个角色:源和目的。和目的。v输入流输入流:代表从外设流入程序的数据序列;代表从外设流入程序的数据序列;v输出流输出流:代表从程序流向外设的数据序列。代表从程序流向外设的数据序列。v字节流字节流:在输入输出过程中以:在输入输出过程中以字节字节为单位。为单位。v字符流字符流:在输入输出过程中以:在输入输出过程中以字符字符为单位。为单位。v缓冲流缓冲流:通过建立输入输出缓冲区,提高数据:通过建立输入输出缓冲区,提高数据输入输出的效率输入输出的效率程序程序文件文件程序程序文件文件输入流输入流输
3、出流输出流源源输入流通过使用输入流通过使用read()方法方法从输入流读出源中的数据从输入流读出源中的数据目的地目的地输出流通过使用输出流通过使用write()方法把数方法把数据写入输出流并传送到目的地据写入输出流并传送到目的地输入流示意图输入流示意图输出流示意图输出流示意图标准输入输出标准输入输出vSystem.inInputStreamu从键盘读入数据从键盘读入数据vSystem.outPrintStreamupublicvoidprint(输出参数输出参数)upublicvoidprintln(输出参数输出参数)vSystem.errPrintStreamu用于向屏幕输出错误信息用于向屏
4、幕输出错误信息java.io包包vjava.io包中提供了各种各样的输入输出流类,它包中提供了各种各样的输入输出流类,它们都是们都是Object类的直接子类,每一个流类代表一类的直接子类,每一个流类代表一种特定的输入或输出流。种特定的输入或输出流。v根据流相对于程序的另一个端点的不同,分为节根据流相对于程序的另一个端点的不同,分为节点流和过滤流点流和过滤流u节点流:以特定源,例如磁盘文件、内存某区域或线节点流:以特定源,例如磁盘文件、内存某区域或线程之间的管道为端点构造的输入程之间的管道为端点构造的输入/输出流输出流u过滤流:以其他已经存在的流为端点构造的输入过滤流:以其他已经存在的流为端点构
5、造的输入/输输出流出流基本流类的继承关系基本流类的继承关系java.lang.ObjectOutputStreamReaderWriterFileRandomAccessFileInputStream v基本输入流(基本输入流(InputStream)和基本输出流)和基本输出流(OutputStream)是处理以)是处理以8位字节为基本单位的位字节为基本单位的字节流类,读写以字节流类,读写以字节字节为单位进行为单位进行v在在Java中,用中,用InputStream类来描述所有输入流类来描述所有输入流的抽象概念的抽象概念vInputStream的常用方法的常用方法upublicabstract
6、intread()从输入流中读取数据的下一个字节。返回从输入流中读取数据的下一个字节。返回0到到255范范围内的围内的int字节值。字节值。upublicintread(byteb)从输入流中读取一定数量的字节,并将其存储在缓冲从输入流中读取一定数量的字节,并将其存储在缓冲区数组区数组b中。以整数形式返回实际读取的字节数。如中。以整数形式返回实际读取的字节数。如果到达流末尾,则返回值果到达流末尾,则返回值-1。upublicintread(byteb,intoff,intlen)将输入流中最多将输入流中最多len个数据字节读入个数据字节读入byte数组。以整数数组。以整数形式返回实际读取的字节
7、数。形式返回实际读取的字节数。upubliclongskip(longn)跳过和丢弃此输入流中数据的跳过和丢弃此输入流中数据的n个字节。返回实际跳过个字节。返回实际跳过的字节数的字节数upublicintavailable()返回可用的未阻塞的字节数返回可用的未阻塞的字节数upublicvoidclose()关闭输入流关闭输入流upublicvoidmark(intreadlimit)在输入流的当前位置做标记,从当前位置最多还能读取在输入流的当前位置做标记,从当前位置最多还能读取readlimit个字符个字符uvOutputStream的常用方法的常用方法upublicabstractvoid
8、write(intb)将指定的字节写入此输出流。将指定的字节写入此输出流。upublicvoidwrite(byteb)将将b.length个字节从指定的个字节从指定的byte数组写入此输出流。数组写入此输出流。upublicvoidwrite(byteb,intoff,intlen)将指定将指定byte数组中从偏移量数组中从偏移量off开始的开始的len个字节写入个字节写入此输出流。此输出流。upublicvoidclose()关闭此输出流并释放与此流有关的所有系统资源。关闭此输出流并释放与此流有关的所有系统资源。upublicvoidflush()刷新此输出流并强制写出所有缓冲的输出字节。
9、刷新此输出流并强制写出所有缓冲的输出字节。upublicabstractvoidwrite(intb)throwsIOException只能写入低字节只能写入低字节ujava.io.FilterInputStreamjava.io.InputStreamjava.io.FilterInputStreamjava.io.BufferedInputStreamjava.util.zip.CheckedInputStreamjavax.crypto.CipherInputStreamjava.io.DataInputStreamjava.util.zip.DeflaterInputStreamjav
10、a.security.DigestInputStreamjava.util.zip.InflaterInputStreamjava.io.LineNumberInputStreamjavax.swing.ProgressMonitorInputStreamjava.io.PushbackInputStream 回压输入流回压输入流缓冲输入流缓冲输入流数据输入流数据输入流java.io.OutputStreamjava.io.ByteArrayOutputStreamjava.io.FileOutputStreamjava.io.FilterOutputStreamjava.io.ObjectO
11、utputStreamjava.io.PipedOutputStreamjava.io.FilterOutputStreamjavax.crypto.CipherOutputStreamjava.io.DataOutputStreamjava.io.PrintStream 格式化输出流格式化输出流缓冲输出流缓冲输出流数据输出流数据输出流vByteArrayInputStream、ByteArrayOutputStreamuByteArrayInputStream包含一个内部缓冲区,包含一个内部缓冲区,该缓冲区存储被读取的字节。该缓冲区存储被读取的字节。u在在ByteArrayOutputStr
12、eam中,数据被写入一个中,数据被写入一个byte数组。缓冲区会随着数据的不断写入而自动数组。缓冲区会随着数据的不断写入而自动增长增长vFileInputStream、FileOutputStreamuFileInputStream从文件系统中的某个文件中获从文件系统中的某个文件中获取输入字节取输入字节。uFileOutputStream是用于将数据写入是用于将数据写入File或或FileDescriptor的输出流。的输出流。vFilterInputStream、FilterOutputStreamuFilterInputStream包含其他一些输入流,它包含其他一些输入流,它将这些流用作其
13、基本数据源,它可以直接传输将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。数据或提供一些额外的功能。uFilterOutputStream位于已存在的输出流(位于已存在的输出流(基基础础输出流)之上,它们将已存在的输出流作为输出流)之上,它们将已存在的输出流作为其基本数据接收器,但可能直接传输数据或提其基本数据接收器,但可能直接传输数据或提供一些额外的功能。供一些额外的功能。vObjectInputStream、ObjectOutputStreamuObjectInputStream对以前使用对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化。写入
14、的基本数据和对象进行反序列化。uObjectOutputStream和和ObjectInputStream分别与分别与FileOutputStream和和FileInputStream一起使用时,可一起使用时,可以为应用程序提供对对象图形的持久存储。以为应用程序提供对对象图形的持久存储。uObjectOutputStream将将Java对象的基本数据类型和对象的基本数据类型和图形写入图形写入OutputStreamu只能将支持只能将支持接口的对象写入流中。接口的对象写入流中。vPipedInputStream和和PipedOutputStreamu管道输入流应该连接到管道输出流管道输入流应该连
15、接到管道输出流u管道输入流提供要写入管道输出流的所有数据字节管道输入流提供要写入管道输出流的所有数据字节u通常,数据由某个线程从通常,数据由某个线程从PipedInputStream对象读对象读取,取,并由其他线程将其写入到相应的并由其他线程将其写入到相应的PipedOutputStream。vBufferedInputStream和和BufferedOutputStreamu创建创建BufferedInputStream时即创建了一个内部缓冲区数时即创建了一个内部缓冲区数组。组。u通过设置通过设置BufferedOutputStream,应用程序就可以将各个,应用程序就可以将各个字节写入底层
16、输出流中,而不必针对每次字节写入调用底字节写入底层输出流中,而不必针对每次字节写入调用底层系统层系统u关闭关闭BufferedOutputStream时,如果缓存未满,就强迫将时,如果缓存未满,就强迫将数据压入输出流中数据压入输出流中vStringBufferInputStreamuStringBufferInputStream类允许应用创建一个输入流,从某类允许应用创建一个输入流,从某一串中读取流的字节数据。一串中读取流的字节数据。vSequenceInputStreamuSequenceInputStream表示其他输入流的逻辑串联。表示其他输入流的逻辑串联。u它从输入流的有序集合开始,并
17、从第一个输入流开始读取,它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。直到到达包含的最后一个输入流的文件末尾为止。vLineNumberInputStreamu提供跟踪当前行号的附加功能。提供跟踪当前行号的附加功能。u行是以回车符行是以回车符(r)、换行符、换行符(n)或回车符后面紧跟换或回车符后面紧跟换行符结尾的字节序列。行符结尾的字节序列。vPushbackInputStreamuPushbackInputStream为另一个输入流添加性
18、能,即为另一个输入流添加性能,即“推回推回(pushback)”或或“取消读取取消读取(unread)”一个字一个字节的能力。节的能力。u在代码片段可以很方便地读取由特定字节值分隔的不在代码片段可以很方便地读取由特定字节值分隔的不定数量的数据字节时,这很有用;在读取终止字节后,定数量的数据字节时,这很有用;在读取终止字节后,代码片段可以代码片段可以“取消读取取消读取”该字节,这样,输入流上该字节,这样,输入流上的下一个读取操作将会重新读取被推回的字节。的下一个读取操作将会重新读取被推回的字节。publicvoidunread(intb)推回一个字节。推回一个字节。vDataInputStrea
19、m、DataOutputStreamu数据输入流允许应用程序以与机器无关方式从底层输数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本入流中读取基本Java数据类型。数据类型。u数据输出流允许应用程序以适当方式将基本数据输出流允许应用程序以适当方式将基本Java数据数据类型写入输出流中。类型写入输出流中。vProgressMonitorInputStreamu在读取文件时会弹出一个显示读取速度的进度条在读取文件时会弹出一个显示读取速度的进度条vPrintStreamuPrintStream为其他输出流添加了功能,使它们能够为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式
20、。方便地打印各种数据值表示形式。u与其他输出流不同,与其他输出流不同,PrintStream永远不会抛出永远不会抛出IOException;而是,异常情况仅设置可通过;而是,异常情况仅设置可通过checkError方法测试的内部标志。方法测试的内部标志。标准输入和输出v在在Java中,标准输入是中,标准输入是键盘键盘,标准输出是,标准输出是显示器显示器屏幕屏幕vSystem类管理标准输入输出流和错误流。类管理标准输入输出流和错误流。v类中申明了如下类变量:类中申明了如下类变量:upublicstaticfinalInputStreaminupublicstaticfinalPrintStrea
21、moutupublicstaticfinalPrintStreamerr vSystem.in:从标准输入获取输入:从标准输入获取输入(通常是通常是键盘键盘)uSystem.in是是InputStream类的对象,使用类的对象,使用read()和和skip(longn)方法读取。方法读取。u一直打开并准备好提供输入的数据一直打开并准备好提供输入的数据vSystem.out:把输出送到缺省的显示:把输出送到缺省的显示(通常通常是显示器是显示器)uSystem.out是是PrintStream类的对象,使用类的对象,使用print()和和println()来输出。来输出。u一直打开并准备好接收输出
22、的数据一直打开并准备好接收输出的数据vSystem.err:把错误信息送到缺省的显示:把错误信息送到缺省的显示标准输入输出示例:标准输入输出示例:importjava.io.*;publicclassStandardIOpublicstaticvoidmain(Stringargs)intch;(请输入一行字符请输入一行字符);trywhile(ch=()!=r)System.out.write(ch);catch(IOExceptione)System.out.println(e.toString();System.out.write(n);思考:程序结果?思考:程序结果?importjav
23、a.io.*;publicclassIOTestpublicstaticvoidmain(Stringargs)trybytebArray=newbyte128;System.out.println(“Entersomething:”);System.in.read(bArray);System.out.println(“Youentered:”);System.out.println(bArray);catch(IOExceptionioe)System.out.println(ioe.toString();结果:结果:原因原因:System.out.println(bArray)输出的是输
24、出的是数组的地址而不是字符数组的地址而不是字符改进改进:将字符数组变换成字符串将字符数组变换成字符串before:System.out.println(bArray);now:Strings=newString(bArray,0,bArray.Length);System.out.println(s);bytebuffer=newbyte200;intd=0,count=0;trycount=System.in.read(buffer);catch(Exceptione)System.out.print(e);for(inti=0;icount;i+)System.out.print(char
25、)bufferi);System.out.println(“Inputtenchar:”);for(inti=1;i=10;i+)tryd=();System.out.println(char)d);catch(Exceptione)System.out.print(e);v如何判断一个文件是否具有下列属性如何判断一个文件是否具有下列属性u是否可读是否可读?u是否可写是否可写?u文件长度是多少文件长度是多少?u文件是否存在文件是否存在?u文件的名称是什么文件的名称是什么?u文件的绝对路径是什么文件的绝对路径是什么?u文件的父目录是什么文件的父目录是什么?u是文件夹还是文件是文件夹还是文件?u是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 输入输出
限制150内