Java中DataOutputStream写入基本类型数据的正确方法
发布时间 - 2026-02-02 00:00:00 点击率:次dataoutputstream的writeutf()仅支持string类型,写入int、double等基本类型需使用对应专用方法(如writeint、writedouble),否则编译报错。
在使用 java.io.DataOutputStream 进行二进制序列化时,必须严格匹配数据类型与写入方法——这是初学者常踩的坑。你遇到的错误:
'writeUTF(java.lang.String)' cannot be applied to '(double)' 'writeUTF(java.lang.String)' cannot be applied to '(int)'
根本原因在于:writeUTF() 是专为字符串设计的方法,它将 String 按修改版 UTF-8 编码写入流,并附带长度前缀(2字节)。它不接受任何数值类型(如 int、double、long 等),哪怕你尝试用 String.valueOf() 之外的方式“强转”,编译器也不会接受。
✅ 正确做

| 字段类型(示例) | 应调用方法 | 说明 |
|---|---|---|
| String getAccountHolderName() | writeUTF(String) | ✅ 原生支持 |
| String getAccountType() | writeUTF(String) | ✅ 同上 |
| double getBalance() | writeDouble(double) | ⚠️ 不可用 writeUTF(String.valueOf(balance))(会丢失精度且非标准二进制格式) |
| int getAccountNumber() | writeInt(int) | ⚠️ 同样不可用 writeUTF() 或 parseInt() 转换 |
? 修正后的代码示例:
for (Account accountObj : accounts) {
System.out.println(accountObj); // 建议用 println 便于调试
account.writeUTF(accountObj.getAccountHolderName());
account.writeUTF(accountObj.getAccountType());
account.writeDouble(accountObj.getBalance()); // ✅ 替换 writeUTF
account.writeInt(accountObj.getAccountNumber()); // ✅ 替换 writeUTF
}? 补充说明:
- 若后续需用 DataInputStream 读取,必须严格按相同顺序、相同方法配对读取(如 writeDouble() → readDouble(),writeInt() → readInt()),否则数据错位或抛出 IOException。
- writeUTF() 写入的字符串可用 readUTF() 安全读回;但 writeBytes() 或 writeChars() 不兼容 readUTF(),切勿混用。
- 数值类型绝不应通过 String.valueOf(x) + writeUTF() 间接写入:这会导致可读性下降、解析困难、精度损失(尤其浮点数),且违背二进制协议设计初衷。
? 总结:DataOutputStream 是类型安全的二进制输出工具,其 API 设计即要求“所写即所申明”。牢记 ——
String → writeUTF();int → writeInt();double → writeDouble();boolean → writeBoolean();以此类推。 遵循这一原则,即可彻底规避类型不匹配编译错误,并确保数据可正确、高效、跨平台地持久化与恢复。
# java
# 编码
# app
# 字节
# 工具
# ai
# stream
# 编译错误
# string类
# 数据类型
# String
# Boolean
# 字符串
# int
# double
# 值类型
# 不可用
# 这是
# 这一
# 以此类推
# 报错
# 专为
# 它将
# 不接受
# 这会
# 抛出
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
详解MySQL数据库的安装与密码配置
如何在Tomcat中配置并部署网站项目?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
详解vue.js组件化开发实践
长沙企业网站制作哪家好,长沙水业集团官方网站?
JavaScript模板引擎Template.js使用详解
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
如何在 Pandas 中基于一列条件计算另一列的分组均值
如何用y主机助手快速搭建网站?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Android Socket接口实现即时通讯实例代码
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在万网主机上快速搭建网站?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在阿里云部署织梦网站?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
如何快速搭建高效WAP手机网站吸引移动用户?
如何快速搭建高效服务器建站系统?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
如何自定义建站之星网站的导航菜单样式?
香港网站服务器数量如何影响SEO优化效果?
如何利用DOS批处理实现定时关机操作详解
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
如何获取上海专业网站定制建站电话?
Laravel如何处理异常和错误?(Handler示例)
Laravel如何配置任务调度?(Cron Job示例)
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
JavaScript如何实现错误处理_try...catch如何捕获异常?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
移动端脚本框架Hammer.js
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
如何快速登录WAP自助建站平台?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
教你用AI将一段旋律扩展成一首完整的曲子
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
网站建设保证美观性,需要考虑的几点问题!
无锡营销型网站制作公司,无锡网选车牌流程?
详解CentOS6.5 安装 MySQL5.1.71的方法
JavaScript中的标签模板是什么_它如何扩展字符串功能
Laravel如何使用Blade模板引擎?(完整语法和示例)

