dataoutputstream是filteroutputstream子类,用于以机器无关格式写入java基本类型和字符串,需包装底层字节流,调用writeint()等方法,按大端序写入,须与datainputstream读取顺序严格一致。

在 Java 中,DataOutputStream 是 FilterOutputStream 的子类,专门用于以**与机器无关的格式**向底层输出流写入 Java 基本数据类型(如 int、double、boolean 等)和字符串。它不直接关联文件,必须包装一个已存在的字节输出流(如 FileOutputStream)才能使用。
核心用法:包装 + 调用对应 write 方法
使用 DataOutputStream 写入基本类型的关键步骤是:
- 创建一个底层字节输出流(例如
FileOutputStream或ByteArrayOutputStream) - 用该流构造
DataOutputStream实例 - 调用其提供的类型专属写方法(如
writeInt()、writeDouble()、writeUTF()等) - 务必调用
close()或使用 try-with-resources 自动释放资源
常用写入方法对照表
DataOutputStream 提供了与每种基本类型匹配的方法,所有数值类型都按大端(Big-Endian)方式写入固定字节数:
-
writeBoolean(boolean v)→ 写入 1 字节(true为1,false为0) -
writeByte(int v)→ 写入 1 字节(低 8 位) -
writeShort(int v)→ 写入 2 字节(大端,高字节在前) -
writeChar(int v)→ 写入 2 字节(Unicode 码点,大端) -
writeInt(int v)→ 写入 4 字节(大端) -
writeLong(long v)→ 写入 8 字节(大端) -
writeFloat(float v)→ 写入 4 字节(IEEE 754 单精度) -
writeDouble(double v)→ 写入 8 字节(IEEE 754 双精度) -
writeUTF(String s)→ 按修改版 UTF-8 编码写入字符串(含长度前缀,最大支持 65535 字节)
完整示例:写入混合数据到文件
以下代码将一个整数、一个双精度浮点数、一个布尔值和一个字符串顺序写入 data.bin 文件:
try (DataOutputStream dos = new DataOutputStream(
new FileOutputStream("data.bin"))) {
dos.writeInt(12345); // 4 字节
dos.writeDouble(3.1415926); // 8 字节
dos.writeBoolean(true); // 1 字节
dos.writeUTF("Hello World"); // 先写 2 字节长度,再写 UTF 编码字节
} catch (IOException e) {
e.printStackTrace();
}
生成的 data.bin 文件中,数据严格按调用顺序连续存放,可被 DataInputStream 精确读回(顺序和类型必须一致)。
注意事项与常见误区
-
DataOutputStream不提供writeString()—— 必须用writeUTF()写字符串;若需标准 UTF-8 且无长度限制,可先用s.getBytes(StandardCharsets.UTF_8)得到字节数组,再用write(byte[]) - 写入顺序必须和后续读取顺序完全一致,否则会因字节错位导致数据解析错误(如把 int 的后 2 字节当 short 读)
-
writeChars(String)方法存在,但它是逐字符调用writeChar(),每个字符写 2 字节(UTF-16),一般不推荐用于普通文本 - 不要用
write(byte[])直接写基本类型值(如write(new byte[]{1,2})),这不会被识别为short,只是两个独立字节
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











