DataInputStream,DataOutputStream主要用于基础Java数据类型数据的序列化/反序列化;将基本的Java数据类型数据与二进制字节相互转化;
例如,我们可以利用DataOutputStream.writeUTF(String s)方法,直接将一个String对象写入一个字节输出流中,之后再利用DataInputStream.readUTF()方法将String对象直接读取出来。简化了中间转换的操作。
注意:读取和写入的顺序应该一致,否则会导致错误的数据拆分。
public class DataInputStream extends FilterInputStream implements DataInput
从一个底层字节input stream中读取Java基础数据类型(byte char int double, .etc)的数据;
使用data output stream写入的数据可以使用data input stream读取;
public class DataOutputStream extends FilterOutputStream implements DataOutput
向一个底层的字节output stream中写入Java基础数据类型(byte char int double, .etc)的数据;
使用data output stream写入的数据可以使用data input stream读取;
使用示例:
我们将首先创建一个内存(字符数组)输出流,用于向其中写入数据;然后利用DataOutputStream向其中直接写入基础数据类型的Java对象,之后再利用DataInputStream从其中直接读取出对应的Java对象;
package com.gof.io.test; import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.io.DataOutputStream; import java.io.DataInputStream; public class DataInputAndOutputApp { public static void main(String[] args){ ByteArrayOutputStream baos = null; ByteArrayInputStream bais = null; DataOutputStream dos = null; DataInputStream dis = null; int n = 10; double d = 12.05; String str = "test string"; try{ // write baos = new ByteArrayOutputStream(); dos = new DataOutputStream(baos); dos.writeInt(n); dos.writeDouble(d); dos.writeUTF(str); dos.flush(); // read bais = new ByteArrayInputStream(baos.toByteArray()); dis = new DataInputStream(bais); System.out.println("The int is: " + dis.readInt()); System.out.println("The double is: " + dis.readDouble()); System.out.println("The String is: " + dis.readUTF()); }catch (Exception e){ e.printStackTrace(); }finally{ try{ dis.close(); dos.close(); bais.close(); baos.close(); }catch (Exception e){ e.printStackTrace(); } } } }
输出结果:
<span style="font-family:SimSun;"><span style="font-size:10px;">The int is: 10 The double is: 12.05 The String is: test string </span></span>
如果调整readXXX操作的顺序,将得到错误的结果。