读写二进制数据

目前,我们已经读写了包括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