DataOutputStream 以平台无关二进制格式写入Java基本类型,需包装FileOutputStream,调用writeXxx()方法(如writeInt、writeUTF),严格按顺序和类型配对读写,务必关闭资源。

使用 DataOutputStream 可以将 Java 基本数据类型(如 int、double、boolean 等)以**平台无关的二进制格式**写入文件,避免字符编码或文本解析问题,适合保存结构化原始数据。
核心步骤:包装 FileOutputStream
DataOutputStream 本身不直接操作文件,必须包装一个 FileOutputStream 实例。它提供一系列 writeXxx() 方法(如 writeInt()、writeUTF()),自动处理字节序(固定为大端序)和类型长度。
- 创建
FileOutputStream指向目标文件(会自动创建文件,若路径不存在需提前建目录) - 用该流构造
DataOutputStream - 调用对应方法写入数据(例如
dos.writeInt(123)写入 4 字节 int) - 务必调用
close()或使用 try-with-resources 自动释放资源
支持的基本类型写入方法
每种方法写入固定字节数,严格按 Java 规范定义:
-
writeBoolean(boolean v)→ 1 字节(true为1,false为0) -
writeByte(int v)/writeShort(int v)/writeInt(int v)/writeLong(long v)→ 分别写入 1/2/4/8 字节,大端序 -
writeFloat(float v)/writeDouble(double v)→ 按 IEEE 754 格式写入 4/8 字节 -
writeChar(int v)→ 写入 2 字节 Unicode 码点(注意不是 UTF-8 字符) -
writeUTF(String s)→ 特殊格式:先写 2 字节长度,再写 UTF-8 编码字节(非标准 UTF-8,DataInputStream.readUTF()才能正确读)
完整示例:写入混合类型数据
以下代码将学生信息(学号 int、姓名 String、成绩 double、是否及格 boolean)写入 student.dat:
立即学习“Java免费学习笔记(深入)”;
try (DataOutputStream dos = new DataOutputStream(
new FileOutputStream("student.dat"))) {
dos.writeInt(1001); // 学号
dos.writeUTF("张三"); // 姓名(writeUTF,非 writeBytes)
dos.writeDouble(89.5); // 成绩
dos.writeBoolean(true); // 及格状态
} catch (IOException e) {
e.printStackTrace();
}
生成的文件是二进制,不可直接用文本编辑器阅读;后续必须用 DataInputStream 按**完全相同的顺序和类型**读取,否则数据错乱。
注意事项与常见陷阱
-
顺序必须严格匹配:写入顺序 = 读取顺序,类型必须一致(如写
writeInt(),读就必须用readInt()) -
writeUTF 和 readUTF 配对使用:不要混用
writeBytes()或writeChars(),它们编码方式不同 -
不支持 null 字符串:对
null调用writeUTF()会抛NullPointerException -
无内置分隔符或长度头:多个相同类型连续写入时(如 10 个
int),需自行记录数量,读取时循环调用readInt()


















