Java程序设计修改-ch09

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|章输入输出流流是指在通信路径上从信源到目的地传输的字节序列。多数应用程序都需要与外部设备进行数据交换,如磁盘和网络。Java语言的输入与输出功能通过流类来实现,这些类都存放在java.io包中。本章要点数据流的概念字节流类的用法字符流类的用法文件的读出与写入本章难点输入输出流类之间的关系学习目标掌握数据流的概念掌握利用数据流输入与输出数据掌握文件的读出与写入9.1数据流的概念9.1.1输入流与输出流流是按一定顺序排列的数据的集合。输入数据时,一个程序打开数据源上的一个流(文件或内存等),然后按顺序输入这个流中的数据,这样的流称为输入流。输出数据时,一个程序可以打开一个目的地的流,然后按顺序从程序向这个目的地输出数据,这样的流称为输出流。输入和输出的方向是以程序为基准的,向程序输入数据的流定义为输入流,从程序输出数据的流定义为输出流。通常,将从输入流中向程序中输入数据称为读数据(read),反之,从程序中将数据输出到输出流中称为写数据(write)。9.1.2字节流与字符流按照Java的输入/输出流的数据类型,流可分为字节流和字符流两类。1.字节流字节流是按字节读/写二进制数据。在javo.io包中,基本输入流类(InputStream)和基本输出流类(OutputStream)是处理以8位字节为基本单位的字节流类,读写以字节为单位进行。在对数据流操作时,即可以向输出流写入一个字节,或从输入流中读取一个字节,显然这样数据的传输效率很低。为提高数据的传输效率,通常使用缓冲流(bufferedstream),即为一个流配有一个缓冲区(buffer),一个缓冲区就是专门用于传送数据的—块内存。本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|当向一个缓冲流写入数据时,系统将数据发送到缓冲区,而不是直接发送到外部设备。缓冲区自动记录数据,当缓冲区满时,系统将数据全部发送到相应的设备。当从一个缓冲流中读取数据时,系统实际是从缓冲区中读取数据。当缓冲区空时,系统就会从相关设备自动读取数据,并读取尽可能多的数据充满缓冲区。由此可见,缓冲流提高了内存与外部设备之间的数据传输效率。2.字符流字符流的输入/输出数据是Unicode字符,当遇到不同的编码时,Java的字符流会自动将其转换成Unicode字符。Reader类和Writer类是专门处理16位字符流的类,其读写以字符为单位进行。上述提到的InputStream类、OutputStream类、Reader类和Writer类均是基本输入和输出的抽象类,不能用于直接创建对象来完成输入输出操作,所以,需要使用这些类的子类来完成特定类型或格式的输入输出操作。在Java编程操作中,文件操作是最常用的操作之一,我们可以利用字节流操作来完成对于随机文件的读取,可以利用字符流操作完成对于一般文本文件的读取。图9-1列出了常用的基本流类,图9-2列出了字节流各类之间的关系,图9-3列出了字符流各类之间的关系。ObjectInputStreamOutputStreamReaderWriterFileRandomAccessFile图9-1基本流类的继承关系本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|包字节流的类层次关系图本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|包字符流的类层次关系图9.1.3Java的标准数据流Java的标准数据流是指在字符方式下(如DOS),程序与系统进行交互的方式。Java通过系统类System实现标准输入输出的功能。System类在java.lang包中,声明为一个final类。System类定义了三个成员变量,分别是:staticPrintStreamerr“标准”错误输出流,对象是屏幕。staticInputStreamin“标准”输入流,对象是键盘。staticPrintStreamout“标准”输出流,对象是屏幕。这三个变量都是静态(static)成员变量,即类成员变量,所以可以直接使用。in定义为9.3节要讨论的InputStream类的static成员变量,所以可以直接调用InputStream类提供的输入方法,out和err定义为9.3节要讨论的PrintStream类的static成员变量,所以可以直接调用PrintStream类提供的输出方法。1.标准输入System.inSystem.in用于标准输入,其中read方法从键盘接收数据。publicintread()throwsIOException返回读入的一个字节publicintread(byte[]b)throwsIOException读入的多个字节返回缓冲区b中如果输入流结束,返回-1,发生I/O错误时,抛出IOException异常。2.标准输出System.outSystem.out用于屏幕输出,常用的调用方法有print和println,这两个方法支持Java的任意基本类型作为参数。本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|(Stringstr);向屏幕输出字符串strSystem.out.println(Stringstr);向屏幕输出字符串str后换行这两个语句已在前面各章的程序中多次使用。3.标准错误输出System.errSystem.err与System.out类似,主要是系统输出错误信息时使用。【例9-1】读取字节流,并显示。importjava.io.*;publicclassExam9_1{publicstaticvoidmain(Stringargs[])throwsIOException{intna=System.in.read();//读取数据流System.out.println(na);//按字符方式显示输入字符的Uncode码}}运行结果:图9-4System.in.read()方法使用程序分析:使用System.in.read()方法,只能读取第一个字符,读者朋友可多输入几个字符试一下。【例9-2】本例通过键盘输入字符,读入缓冲区中,显示出实际读入缓冲区的字节数,并以整数和字符两种方式输出缓冲的值。importjava.io.*;publicclassExam9_2{publicstaticvoidmain(Stringargs[])throwsIOException{byteb[]=newbyte[9];//定义一个byte类型的数组b,用来做为缓冲区System.out.println(请输入:);intnb=System.in.read(b);//取出输入字节数的长度,存放在整型变量nb中System.out.println(您输入的字符数为:+nb);for(inti=0;i=nb-1;i++){//输出缓冲区元素值System.out.println(b[i]);}本资料由-大学生创业|创业|创业网提供资料在线代理|网页代理|代理网页|减肥药排行榜|淘宝最好的减肥药|什么减肥药效果最好|减肥瘦身药|(您输入的字符是:);for(inti=0;i=nb-1;i++){//按字符方式输出System.out.print((char)(b[i]));}}}图9-5从键盘输入字符程序分析:read方法在java.io包中,要抛出IOException异常,在上两例中由main方法抛出,交由系统处理。程序运行时,从键盘输入4个字符“abcd”,并按Enter键。保存在缓冲区中的实际字符个数为6,字符值是对应输入字符的ASCII码值,字符串结尾会自动加上回车和换行(“\r\n”)两个字符占用2字符。9.2字节流类基本输入/输出类InputStream类,OutputStream类都是抽象类,不能实例化,因此在实际应用中并不使用这两个类,而是使用—些基本数据流类,他们都是InputStream类和OutputStream类的子类,在实现其超类方法的同时又定义了特有功能,用于不同的场合。InputStream类和OutputStream类为通用的字节流类提供了一些基本方法和标准接口。9.2.1InputStream(字节输入流)类和OutputStream(字节输出流)类

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功