输入输出流java程序设计及应用

上传人:shaoy****1971 文档编号:113588857 上传时间:2019-11-09 格式:PPT 页数:64 大小:720.81KB
返回 下载 相关 举报
输入输出流java程序设计及应用_第1页
第1页 / 共64页
输入输出流java程序设计及应用_第2页
第2页 / 共64页
输入输出流java程序设计及应用_第3页
第3页 / 共64页
输入输出流java程序设计及应用_第4页
第4页 / 共64页
输入输出流java程序设计及应用_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《输入输出流java程序设计及应用》由会员分享,可在线阅读,更多相关《输入输出流java程序设计及应用(64页珍藏版)》请在金锄头文库上搜索。

1、2019/11/9,第7章 输入输出流,1,第7章 输入输出流,7.1 流概述 7.2 基本输入输出流 7.3 标准输入输出 7.4 文件处理 7.5 本章小结 输入输出流是Java中输入输出功能的基础,是最基本的操作,许多程序需要读写数据都离不开I/O方法。本章主要讲述了流、输入输出流、InputStream类、OutputStream类、Reader类和Writer类,同时介绍了标准输入和输出和文件处理。,2019/11/9,第7章 输入输出流,2,7.1 流概述,流一般分为输入流(InputStream)和输出流(OutputStream)两类。 输入流将外部设备数据引入到计算机中,例如

2、从网络中读取信息,从扫描仪中读取图像信息等; 输出流将数据引导到外部设备(屏幕或文件),例如向网络中发布信息,在屏幕上显示图像和文件内容等。 但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数入流,而屏幕则只是一个输出流。 因此,可以将“流”看作数据从一种设备流向另一种设备的过程。它的最大特点是数据的获取和发送均按数据序列顺序进行:每一个数据都必须等待排在它前面的数据读入或送出之后才能被读写,而不能随意选择输入输出的位置。磁带机是实现流式输入输出的较为典型的设备。 输入流(Input Stream)即数据从外部世

3、界流向计算机。 输出流(Output Stream)即是数据从计算机流向外部世界。,2019/11/9,第7章 输入输出流,3,7.1 流概述,基本输入输出流 基本的输入输出类是最简单的类,它用来处理普通的流。其它的派生类是针对某些特定种类的输入或输出。这些类都包含在java.io包中。 图7.1 输入输出流的操作,2019/11/9,第7章 输入输出流,4,7.1 流概述,流的分类,2019/11/9,第7章 输入输出流,5,7.1 流概述,字节流 从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。 InputStream、Outp

4、utStream FileInputStream、FileOutputStream PipedInputStream、PipedOutputStream ByteArrayInputStream、ByteArrayOutputStream FilterInputStream、FilterOutputStream DataInputStream、DataOutputStream BufferedInputStream、BufferedOutputStream 字符流 从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。 Reader、Write

5、r InputStreamReader、OutputStreamWriter FileReader、FileWriter CharArrayReader、CharArrayWriter PipedReader、PipedWriter FilterReader、FilterWriter BufferedReader、BufferedWriter StringReader、StringWriter,2019/11/9,第7章 输入输出流,6,7.1 流概述,Java.io这个软件包包含的两个抽象类,InputStream和OutputStream。所有其它字符数据流的输入/输出类都要扩展这两个基类

6、。 java.io软件包提供了一些类和接口,它们在由InputStream和OuputStream类提供的读写操作的顶端定义了一些有用的抽象。例如,ObjectInputStream类提供了让你把输入/输出流中的数据当成对象来读取的方法,而ObjectOutputStream类提供了让你能够把Java对象写入数据流中的方法。这两个类均为抽象类,也就是说它们不能被实例化,必须子类化之后才能够实现一定的功能。 InputStream超类提供字符输入流的编程接口和具体实现。OuputStream定义写字节或字节型数组的方法。与输入流InputStream类似,一个输出流在创建时就自动打开,也可以用c

7、lose()方法显示关闭一个输出流,或者在对象不再被引用,这个OuputStream要成为收集的垃圾时隐式地关闭。 java.io包包含若干个实现具体输入或输出的InputStream和OuputStream的子类。例如:FileInputStream和FileOutStream就是在文件系统上进行操作的输入输出流。图7.3和7.4分别表示java.io包中的字节输入流和字节输出流类层次。,2019/11/9,第7章 输入输出流,7,7.1 流概述,java.io包中字节输入流的类层次,2019/11/9,第7章 输入输出流,8,7.1 流概述,java.io包中字节输出流的类层次,2019/

8、11/9,第7章 输入输出流,9,7.1 流概述,包中字符输入流的类层次,2019/11/9,第7章 输入输出流,10,7.1 流概述,java.io包中字符输出流的类层次,2019/11/9,第7章 输入输出流,11,7.2 基本输入输出流,InputStream类 InputStream类是以字节为单位的输入流。数据来源可以是键盘,也可以是诸如Internet这样的网络环境。 OutputStream类 OutputStream位于OutputStream类层次的最顶层,它是一个抽象类,OutputStream是与InputStream相对应的输出流类,它具有所有输出流的基本功能。,201

9、9/11/9,第7章 输入输出流,12,7.2.1 InputStream类,InputStream类是以字节为单位的输入流。数据来源可以是键盘,也可以是诸如Internet这样的网络环境。这个类可以作为许多输入类的基类。InputStream类是一个抽象类,因此不能建立其实例类,相反用户必须使用其子类。注意,大多数输入方法都抛出了IOException例外。因此,如果程序中调用拉这些输入方法,就必须捕获和处理IOException例外。 类InputStream处于InputStream类层次的最顶层,2019/11/9,第7章 输入输出流,13,7.2.1 InputStream类,rea

10、d方法 read方法用于从指定的输入流读取以字节为单位的数据,第一次从流的开始位置开始读取,以后每次从上次的结束部位开始读取,即自动实现了位移。 read方法有以下三种形态 public int read(byte buff) throws IOException 该方法以一字节型数组作为参数,可用于一次读取多个字节,读入字节直接放入数组buff中,并返回读取的字节数。使用该方法必须保证数组有足够的大小来保存所要读入的数据,否则Java就会抛出一个IOException。(例7-1) public abstract int read() throws IOException 即不带参数,该方法

11、每次一个字节从指定的输入流中读取数据。返回值也是int类型,但它并不代表读取的字节数,而是从流中读取的数据的本身,因数据本身是byte类型的,所以一般要强制进行转化;如果没有数据返回的值是-1。在Java中,不能直接把一个整数转换为字符,因为Java的整数为32位,而字符则是为16位。还须注意,该方法一般是通过子类来实现的,所以通常通过System.io.read()来调用。通过以下例题来说明该方法的使用。( 例7-2) public int read(byte buff ,int start, int len) 从指定流读取数据,从start开始,填充len个字节到buff中,返回值为实际的

12、填充数,如果返回值len,一般表示已将指定流中的数据读完。这个方法还可以用于防止数组越界,其用法是:把start设置为0,len设成数组长度。这样,既可填充整个数组,又能保证不会越界。,2019/11/9,第7章 输入输出流,14,7.2.1 InputStream类,available方法 格式:public int available( ) throws IOException 功能:返回当前流中可用字节数。 available方法用于计算指定流中当前有多少字节,如果指定的流是文件流,那么就返回文件的大小。Available返回的值是int类型。有的输入流可能没有能力返回字节数,如果对这些

13、输入流使用avaiable方法,返回值为0。 close方法 格式:public viod close( ) throws IOException 功能:关闭当前流对象 对于打开的stream,Java可以自动回收,但是Java自动回收需要时间,所以最好自己调用close方法来关闭stream,这样方便下一次重新指定的流。所以,I/O流在使用完后一定不要忘记关闭输入流,使用close( )方法执行关闭操作。,2019/11/9,第7章 输入输出流,15,7.2.1 InputStream类,skip方法 格式:public long skip(long n) throws IOExceptio

14、n 功能:跳过指定的字节数。 skip方法类似于C语言中的lseek,都是用于定位的。Skip方法定义:long skip(long n),该方法使指定流中的当前位置移动n个字节,n的值可以是负值用于向前移,skip方法返回值为实际移动的字节数,由于种种原因,如已到流尾或者其它原因返回的值往往小于n。对于读取文件来说,小于n的原因最大的原因是读到了文件尾。 InputStream类的几个常用方法还有: public Synchronized void mark(int readlimit):在流中标记一个位置。 public Synchronized void reset( ) throws

15、IOException:返回流中放标记的位置。 public Boolean markSupport( ):返回一个表示流是否支持标记和复位操作的布尔值。,2019/11/9,第7章 输入输出流,16,7.2.1 InputStream类,使用InputStream的注意点 当程序中调用InputStream进行请求,所调用的方法就处在等待状态,这种状态就是“堵塞”。请分析下面一段程序: Try int.byt=System.in.read( ); catch(IOException e) System.out.println(e.toString( ); 当程序运行到System.in.re

16、ad( )的时候就等待用户输入,直到用户输入一个回车键为止。 InputStream类操作的是字节数据,不是字符。ASCII字符和字节数据对应8位数据,Java的字符为16位数据,Unicode字符集对应16位字节数据, Java的整数为32位。这样,利用InputStream类来接收键盘字符将收不到字符的高位信息。 流是通过-1来标记结束的。因此,必须用整数作为返回的输入值才可以捕捉到流的结束。否则,如果使用的是相当于无符号整数的字符来保存,则无法确认流何时结束。 从字节输入流InputStream类的层次结构图可以看出,InputStream是所有基于字节的输入流类的超类。由于它本身是抽象类,不能用来直接创建对象,它提供的方法通常是在其子类的对象中被使用的。,2019/11/9,第7章 输入输出流,17,7.2.1 InputStream类,FileInputStream FileInputStream是从InputStream中继承下来的,称为文件字节输入流,是将文件作为源端设备和目的端设备进行字

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号