目前,我们已经读写了包括ASCII字符的字节,但是也可以读取和写入其他类型的数据,的确这也很常见.例如,可以创建包含int,double或short数据的文件.要读取和写入Java基本类型的二进制值,需要使用DataInputStream和DataOutputStream.
DataOutputStream实现了DataOutput接口.该接口定义了把所有Java基本类型写入文件的方法.数据的写入使用的是内部二进制格式,而不是人们可读的文本形式,理解这一点很重要.Java基本类型常用的输出方法如下所示,当错误发生时,每种方法都可以抛出一个IOException.
输出方法
|
目的
|
void writeBoolean(boolean val)
|
写入val指定的boolean类型数据
|
void writeByte(int val)
|
写入val指定的低阶字节
|
void writeChar(int val)
|
写入val指定的字符的值
|
void writeDouble(double val)
|
写入val指定的double类型数据
|
void writeFloat(float val)
|
写入val指定的float类型数据
|
void writeLong(long val)
|
写入val指定的long类型数据
|
void writeShort(int val)
|
写入val指定的short类型的值 |
下面是DataOutputStream的构造函数.注意他建立在OutputStream的实例的基础之上:
DataOutputStream(OutputStream outputStream)
这里,outputStream是写入数据的流.要向文件写入输出,可以使用由FileOutputStream为该形参创建的对象.
DataInputStream实现了DataInput接口,该接口定义了读取所有Java基本类型的方法,这些方法如表所示,每种方法都可以抛出IOException,DataInputStream使用一个InputStream实例作为自己的基础,用读取不同Java数据类型的方法来覆盖他.切记,DataInputStream是以二进制格式,而不是可读的文本格式来读取数据的.DataInputStream的构造函数如下所示:
输入方法
|
目的
|
输入方法
|
目的 |
boolean readBoolean()
|
读取boolean类型数据
|
float readFloat()
|
读取Float类型数据
|
byte readByte()
|
读取byte类型数据 |
int readInt()
|
读取int类型数据
|
char readChar()
|
读取char类型数据
|
long readLong()
|
读取long类型数据
|
double readDouble()
|
读取double类型数据
|
short readShort()
|
读取short类型数据
|
这里,inputStream是与创建的DataInputStream的实例相连的流.要从文件读取输入,可以使用由FileInputStream为该形参创建的对象.
下面是一个说明DataOutputStream和DataInputStream的程序.他首先向文件写入各种类型的数据,然后再从文件读取这些数据.
public static void main(String args[]) throws IOException { int i = 33; double d = 1024.14; boolean b = true; try(DataOutputStream dataOut = new DataOutputStream(new FileOutputStream("testdata"))) { System.out.println("writing "+i); dataOut.writeInt(i); System.out.println("writing "+d); dataOut.writeDouble(d); System.out.println("writing "+b); dataOut.writeBoolean(b); } catch (IOException exc) { System.out.println("write error"); } try(DataInputStream dataIn = new DataInputStream(new FileInputStream("testData"))) { i = dataIn.readInt(); System.out.println("reading "+i); d = dataIn.readDouble(); System.out.println("reading "+d); b = dataIn.readBoolean(); System.out.println("reading "+b); } catch(IOException exc) { System.out.println("Read error"); } }
输出:
writing 33 writing 1024.14 writing true reading 33 reading 1024.14 reading true