数据流是一种装饰流:
DataInputStream 和 DataOutputStrean 的作用是方便我们处理8大基本数据类型和字符串,
它不止保留了数据,还保留了数据类型,方便我们后期获取这个数据类型,而不用我们去强转了。
处理的时候要保证顺序一致(数据类型的排序),读取的顺序和写出的顺序保持一致。
一般来说,是先写出再读取。
DataOutputStream 以便携式方式将原始Java数据类型写入输出流(即保留了数据类型)。
DataOutputStream 的构造器:
需要一个字节流就可以了。
不管怎么放,内部一定要有一个最底层的节点流。
DataInputStream 从基础输入流读取原始Java数据类型。
DataInputStream 的构造器:
给构造器传一个字节输入流。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
//写出
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
//操作数据类型+数据
try {
dos.writeUTF("这是字符串");
dos.writeInt(18);
dos.writeBoolean(false);
dos.writeChar('A');
dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
byte[] datas = baos.toByteArray();
//读取
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(datas));
//顺序与写出一致
String msg = null;
int age = 0;
boolean flag = true;
char ch = 0;
try {
msg = dis.readUTF();
age = dis.readInt();
flag = dis.readBoolean();
ch = dis.readChar();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(msg);
System.out.println(age);
System.out.println(flag);
System.out.println(ch);
}
}
输出结果:
这是字符串
18
false
A
dos讲数据写到字节数组输出流(ByteArrayOutputStream)baos里面了,然后用toByteArray方法写到字节数组datas里了。
加上缓冲流,提升性能:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
//写出
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(baos));
//操作数据类型+数据
try {
dos.writeUTF("这是字符串");
dos.writeInt(18);
dos.writeBoolean(false);
dos.writeChar('A');
dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
byte[] datas = baos.toByteArray();
//读取
DataInputStream dis = new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
//顺序与写出一致
String msg = null;
int age = 0;
boolean flag = true;
char ch = 0;
try {
msg = dis.readUTF();
age = dis.readInt();
flag = dis.readBoolean();
ch = dis.readChar();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(msg);
System.out.println(age);
System.out.println(flag);
System.out.println(ch);
}
}
输出结果:
这是字符串
18
false
A