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 规范定义:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
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:
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()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










