在实际的应用开发中经常会遇到数据输入输出的需求这样的需求在Java中使用IO流来实现.pptx
《在实际的应用开发中经常会遇到数据输入输出的需求这样的需求在Java中使用IO流来实现.pptx》由会员分享,可在线阅读,更多相关《在实际的应用开发中经常会遇到数据输入输出的需求这样的需求在Java中使用IO流来实现.pptx(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6.1 I/O流一个好的程序语言,完善的输入输出功能是必不可少的。在Java中将不同来源和目标的数据统一抽象为流,通过对流对象的操作来完成I/O功能。Java中的流很灵活,可以连接到各种不同的源或目标,如磁盘文件、键盘(输入设备)、显示器(输出设备)、网络等。第1页/共33页6.1.1 流的层次Java中所有的I/O都是通过流来实现的,可以将流理解为连接到数据目标或源的管道,可以通过连接到源的流从源当中读取数据,或通过连接到目标的流向目标中写入数据。根据流的方向可以将其分为两类:输入流和输出流。用户可以从输入流中读取信息,向输出流中写信息。根据流处理数据类型的不同也可以将其分为两类:字节流与字
2、符流。第2页/共33页Java中I/O流是由java.io包来实现的,其中的类大致分为输入和输出两大部分。在java.io包最顶层包含子类较多的两个类是InputStream和OutputStream。这两个类均为抽象类。java.io包中的很多类都是从这两个类继承而来的.第3页/共33页6.1.2 输入流和输出流前面介绍过,Java的I/O类库分成输入和输出两大部分。所有InputStream和Reader的派生类都有一个继承下来的,能读取单个或byte数组的read()方法。所有OutputStream和Writer的派生类都有一个write()方法。第4页/共33页6.1.3 字节流和字
3、符流根据流处理数据类型的不同也可以将其分为两类:字节流与字符流,下面列出了这两种流的不同之处。字节流:字节流以字节为基本单位来处理数据的输入/输出,一般都用于对二进制数据的读写,如声音、图像等。字符流:字符流以字符为基本单位来处理数据的输入和输出,一般都用于对文本类型数据的读写,如文本文件、网络中发送的文本信息等。虽然文本数据也可以看作二进制数据,但一般采用字符流处理文本数据比采用字节流效率更高,也更方便。第5页/共33页6.1.4 随机存取文件流前面介绍的都是顺序访问的流,在Java还有一种支持随机访问的流RandomAccessFile。这个类的实例支持同时进行的读/写操作。一个随机存取文
4、件好比存储在文件系统中的一个大“数组”。该“数组”有一个文件指针,输入操作从该指针所指示的地方开始读取数据,每读一个字节,指针后移一个字节。如果一个随机存取文件以读/写方式创建,也可对其进行输出(写)操作。输出操作也从文件指针所指的地方写字节,并将指针置于所写字节之后。当输出操作超过了“数组”的末尾,将导致文件的扩大。文件指针可用getFilePointer()方法读取,用seek()方法设置。第6页/共33页6.2 I/O流的使用本节将具体介绍如何使用这些流类,包括标准的I/O输出、基本的I/O流、过滤流、文件的随机读写和流的分割。第7页/共33页6.2.1 标准的I/O流下面首先介绍标准的
5、I/O流的使用方法。在Java语言中,键盘用stdin表示,监视器用stdout表示。它们均被封装在System类的类变量in和out中,分别对应于System.in和System.out。事实上,类变量in和out分别属于类InputStream和PrintStream,只是由于InputStream和PrintStream不能用new()方法直接创建,所以才在System类中声明为如下的3个类变量。publicstaticInputStreaminpublicstaticPrintStreamoutpublicstaticPrintStreamerr第8页/共33页6.2.2 基本的I/O
6、流1InputStream类InputStream类是以字节为单位的输入流。数据来源可以是键盘,也可以是诸如Internet这样的网络环境。这个类可作为许多输入类的基类。InputStream是一个抽象类,因此不能建立它的实例,用户只能使用它的子类。注意,大多数输入方法都抛出了IOException异常,因此如果程序中调用了这些输入方法,就必须捕获和处理IOException异常。第9页/共33页6.2.2 基本的I/O流2OutputStream类OutputStream是与InputStream相对应的输出流类,它具有输出流的所有基本功能。由于OutputStream实现输出流的许多方法与
7、InputStream流的方法相对应,下面仅简单列出与输入流类相对应的方法。publicabstractvoidwrite(intb)throwsIOException:向流中写入一个字节。publicvoidwrite(byteb)throwsIOException:向流中写入一个字节数组。publicvoidwrite(byteb,intoff,intlen)throwsIOException:在从数组中的第off个位置开始的len个位置上写入数据。publicvoidflush()throwsIOException:清空流并强制将缓冲区中所有数据写入到流中。publicvoidclose
8、()throwsIOException:关闭流对象。第10页/共33页6.2.2 基本的I/O流3PipedInputStream和PipedOutputStream类管道流用于线程之间的通信。一个PipedInputStream必须连接一个PipedOutputStream,而且一个PipedOutputStream也必须连接一个PipedInputStream。这两个类用于实现与Unix中的管道相似的管道流。PipedInputStream实现管道的输入端,而PipedOutputStream用于实现管道的输出端。PipedInputStream类从管道中读取数据时,这个管道数据是由Pip
9、edOutputStream类写入的。因此,在使用PipedInputStream类之前,必须将它连接到PipedOutputStream类。可以在实例化PipedInputStream类时建立这个连接,或者调用Connect()方法建立连接。PipedInputStream中包含用于读数据的底层方法,同时也提供了读数据的高层接口。第11页/共33页6.2.2 基本的I/O流4SequenceInputStream类SequenceInputStream类是InputStream类的一个子类。使用这个类可以将两个独立的流合并为一个逻辑流。合并后的流中的数据按照在各个流中指定的顺序读出。第一个流
10、结束时,使用无缝连接的方式开始从第二个流中读取数据。下面是一个使用SequenceInputStream类的例子,代码片段如下。1InputStreamis1=newFileInputStream(file1.dat);2InputStreamis2=newFileInputStream(file2.dat);3SequenceInputStreamsis=newSequenceInputStream(is1,is2);4/合并两个流5for(;)6intdata=sis.read();7if(data=-1)break;8第12页/共33页6.2.3 过滤流从前面的介绍可以知道,过滤流Fil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实际 应用 开发 经常 遇到 数据 输入输出 需求 这样 Java 使用 IO 实现
限制150内