abstractintread()从输入流中读取一个字节并返回整数值(0~255)。如果流中无字节可读,则返回-1。该方法是一个抽象方法,在其子类中实现它。

intread(byte[] b)从输入流中读取字节放入字节数组b中并返回实际读取的字节数。

abstract voidwrite(int b)将b的低位字节写入到输出流。这是一个抽象方法,需要在其子类中实现它。

例12.2修改例12.1,从键盘上输入5个字节数据放入字节数组中并将它写入基本的输出流中。

voidclose()关闭输出流。该方法先执行flush()方法把缓冲区中的数据写到流设备上,然后再关闭输出流。

注意:与InputStream类似,写入字节流的方法也都引入了异常处理,如果遇到写错误,将抛出一个IOException异常。

与使用字节输入流类似,使用字节输出流的操作也需要创建OutputStream子类的对象来实现。下边先介绍一下DataOutputStream子类,然后再举一个例子,说明一下字节输出流的操作。

voidflush()立即将流缓冲区中的数据输出。正常情况下,写入数据到输出流时,write()方法并不能将数据直接写到与输出流相连的设备上,而是先存放在流缓冲区中,等到缓冲区中的数据积累到一定数量时才写到设备上。这样处理可以降低计算机对设备的读写次数,提高系统的效率。但是某些情况下,缓冲区中的数据不满时就需要将它写到设备上,诸如数据的写入已经完成、关闭输出流之前等,均应执行flush()方法。

OutputStream类中定义了用来完成从输出流输出数据的—系列方法。下边简要介绍一些常用的方法及其应用。

如前所述,使用字节输入流的操作需要创建ImputStream子类的对象来实现。下边我们先介绍一下DataInputStream子类,然后再举一个例子,说明一下字节输入流的操作。

InputStream类中提供了一系列的方法用来完成从字节输入流读取数据的操作,下边简要介绍一些常用的方法及其应用。

在输入和输出流中用到了许多类,它们形成了一种非常合理的结构,只要我们了解了它们之间的相互关系,就可以正确地使用了。

InputStream类是一个抽象类,它是字节输入流的顶层类。我们不能直接创建InputStream对象,要进行字节输入流的操作,还要靠创建它的子类对象实现。InputStream类被放在java.io包中,它的派生结构如下:

在程序中,我们使用System.in创建数据输入流对象,如前所述System.in既是System类的一个属性成员也是一个InputStream对象。

另外,我们使用了try~catch捕获异常机制的语句,主要是捕获data.read (byteArray)语句执行过程中可能发生的I/O错误,这是系统要求的,对于所有涉及流输入和输出的语句都必须对可能出现的错误进行捕获的处理,如果没有捕获错误的处理,系统在编译时将给出错误提示,程序编译未能获得通过。

voidmark(int readlimit)在流中当前位置处做一个标记。以便其后使用reset()方法返回该点。如果在做了标记之后又从流中读取了超过readlimit个字节,则标记无效。

voidreset()将读取位置返回到标记的位置。如果之前没做标记或该流不支持标记将抛出异常。

注意:读取字节流的方法都引入了异常处理,如果遇到读错误,将抛出一个IOException异常;如果遇到对象为null,则抛出NullPointerException异常;如果使用数组超出范围,则抛出IndexOutOfBoundsException异常。

编译、运行上边的程序,结果如图12.1所示。程序运行时,我们从键盘上输入5个字符,它们被放入字节数组中,输出它们的值,它们以ascii码值的形式展现在我们面前。

程序运行需要取得数据,这些数据可以通过用户从键盘输入获得,也可以从磁盘文件调入,还可以接收来自网络上的数据信息,程序在获得数据之后对其进行处理,并将处理结果输出到屏幕、磁盘文件或打印机上,也可输送到网络上(如远程打印机、网络用户等)。

对程序而言,数据信息从某个地方流向程序中,这就是输入流;数据信息从程序中发送到某个目的地,这就是输出流。

任何一个程序都有一个目的,即输入(提供)什么数据(信息)可输出(获得)所期望的结果。到目前为止,我们在程序中所讨论的输入和输出操作都是在标准设备文件上进行的。本章将简要介绍对数据流、数据文件和数据库文件的输入和输出操作。

输入输出是程序设计的重要组成部分,任何程序设计语言都提供对输入输出的支持。Java也不例外,它采用数据流的形式传送数据。

用二进制的格式可以表示许多类型的数据,比如数字数据、可执行程序代码、因特网通信和类文件代码等等。

以字符方式处理的数据流称为字符流。它不同于字节流,因为Java使用Unicode字符集,存放一个字符需要两个字节。因此这是一种特殊类型的字节流,它只处理文本化的数据。所有涉及文本数据处理,诸如文本文件、网页以及其它常见的文本类型都应该使用字符流。

除了继承父类的所有方法之外,还实现了DataInput接口中所有的方法,这些方法主要是读取各类数据,除了读取八种(boolean,byte,char,short,int,float,long, double)基本类型数据的方法外,还有如下方法:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注