一、DataInputStream概述
数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
二、构造方法
DataInputStream(InputStream in)
使用指定的底层 InputStream 创建一个 DataInputStream
三、常用方法
常用方法列表:
int read(byte[] b) : 从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。
int read(byte[] b, int off, int len):从包含的输入流中将最多 len 个字节读入一个 byte 数组中。
boolean readBoolean() : 读取一个输入字节,如果该字节不是零,则返回 true
,如果是零,则返回 false
。
byte readByte():读取并返回一个输入字节。
char readChar() :读取两个输入字节并返回一个 char
值。
double readDouble(): 读取八个输入字节并返回一个 double
值。
float readFloat():读取四个输入字节并返回一个 float
值。
void readFully(byte[] b):从输入流中读取一些字节,并将它们存储在缓冲区数组 b
中。
void readFully(byte[] b, int off, int len):从输入流中读取 len
个字节。
int readInt() :读取四个输入字节并返回一个 int
值。
long readLong() :读取八个输入字节并返回一个 long
值。
short readShort():读取两个输入字节并返回一个 short
值。
四、DataOutputStream概述
数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
五、构造方法
DataOutputStream(OutputStream out)
创建一个新的数据输出流,将数据写入指定基础输出流。
六、常用方法
常用方法列表:
void flush():清空此数据输出流。
int size():返回计数器 written 的当前值,即到目前为止写入此数据输出流的字节数。
void write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入基础输出流。
void write(int b):将指定字节(参数 b 的八个低位)写入基础输出流。
void writeBoolean(boolean v):将一个 boolean 值以 1-byte 值形式写入基础输出流。
void writeByte(int v):将一个 byte 值以 1-byte 值形式写出到基础输出流中。
void writeBytes(String s):将字符串按字节顺序写出到基础输出流中。
void writeChar(int v):将一个 char 值以 2-byte 值形式写入基础输出流中,先写入高字节。
void writeChars(String s):将字符串按字符顺序写入基础输出流。
void writeDouble(double v) :使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。
void writeFloat(float v) :使用 Float 类中的 floatToIntBits 方法将 float 参数转换为一个 int 值,然后将该 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
void writeInt(int v) :将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
void writeLong(long v) : 将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。
void writeShort(int v) : 将一个 short 值以 2-byte 值形式写入基础输出流中,先写入高字节。
void writeUTF(String str) :以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
七、应用案例
当程序中有这样的一组数组:
int num = 10;
char c = '好';
double d = 88.88;
String info = "Hello,World";
boolean good = true;
程序运行过程中,想要临时退出,下次希望从这个状态继续恢复执行。
希望 Java 能够输出各种数据类型的数据,读取时,能还原各种数据类型的数据,因为这些数据不是纯文本,只能选择字节流。
注意:DataInputStream 与 DataOutputStream 必须配对使用,并且读的顺序要与写的顺序一致。
要求:使用 DataOutputStream 写入的文件或数据,得用 DataInputStream 来读取,并且要求读的顺序与写的顺序要一致。
Demo:
1 @Test
2 public void test01()throws IOException{
3 int num = 10;
4 char c = '好';
5 double d = 188.88;
6 String info = "Hello World";
7 boolean good = true;
8
9 FileOutputStream fos = new FileOutputStream("data.dat");
10 /*fos.write(num);//错误的
11 fos.write(c);
12 fos.write((byte)d);*/
13 DataOutputStream dos = new DataOutputStream(fos);
14
15 dos.writeInt(num);
16 dos.writeChar(c);
17 dos.writeDouble(d);
18 dos.writeUTF(info);
19 dos.writeBoolean(good);
20
21 dos.close();
22 fos.close();
23 }
24
25 @Test
26 public void test02()throws IOException{
27 FileInputStream fis = new FileInputStream("data.dat");
28 DataInputStream dis = new DataInputStream(fis);
29
30 int num = dis.readInt();
31 char c = dis.readChar();
32 double d = dis.readDouble();
33 String s = dis.readUTF();
34 boolean b = dis.readBoolean();
35
36 System.out.println(num);
37 System.out.println(c);
38 System.out.println(d);
39 System.out.println(s);
40 System.out.println(b);
41
42 dis.close();
43 fis.close();
44 }