dataoutputstream 是 java 中用于以与机器无关的大端序格式向输出流写入基本数据类型的工具类,它包装 outputstream 并提供 writexxx() 方法,确保跨平台兼容性。

DataOutputStream 是 Java 中用于以**与机器无关的格式**向输出流写入基本数据类型(如 int、double、boolean 等)的便捷工具类。它本身不处理底层 I/O,而是包装一个已有的 OutputStream(比如 FileOutputStream 或 ByteArrayOutputStream),提供一系列 writeXxx() 方法,确保数据按标准字节序(大端序)写入,便于跨平台读取。
核心写入方法一览
每个基本类型都有对应的方法,命名规则统一为 writeXxx():
-
writeBoolean(boolean v)→ 写入 1 字节(0x00或0x01) -
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 编码字符串,含 2 字节长度前缀
典型使用示例:写入到文件
以下代码将多个基本类型写入二进制文件 data.bin:
try (FileOutputStream fos = new FileOutputStream("data.bin");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeBoolean(true);
dos.writeByte(127);
dos.writeShort(30000);
dos.writeInt(1_000_000);
dos.writeLong(9_223_372_036_854_775_807L);
dos.writeFloat(3.14159f);
dos.writeDouble(2.718281828459045);
dos.writeUTF("Hello 世界");
}
注意:DataOutputStream 必须配合 try-with-resources 或手动调用 close(),否则缓冲区可能未刷新,导致数据丢失。
重要注意事项
- 字节序固定为大端(Big-Endian),无需额外处理,适合跨语言/跨平台解析
-
不支持直接写入对象;若需序列化对象,请用
ObjectOutputStream -
writeUTF()和readUTF()配对使用,它写入的是修改版 UTF-8(带长度头),不是标准 UTF-8 字节流 - 写入的数值是**原始二进制表示**,不是文本;用普通文本编辑器打开会显示乱码
- 若底层流抛出
IOException(如磁盘满、权限不足),DataOutputStream会原样抛出
和普通 OutputStream 的区别
直接用 FileOutputStream.write(int) 只能写单个字节(低 8 位),而 DataOutputStream.writeInt(123456) 会准确写入 4 个字节 0x00 0x01 0xe2 0x40。省去手动拆解、字节序转换等繁琐操作,语义清晰、不易出错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











