0

0

Java中DataOutputStream写入基本类型数据的正确方法

霞舞

霞舞

发布时间:2026-02-02 09:20:01

|

362人浏览过

|

来源于php中文网

原创

Java中DataOutputStream写入基本类型数据的正确方法

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() 转换

? 修正后的代码示例:

青鸟酒店管理系统源码
青鸟酒店管理系统源码

一套酒店管理系统,方便了酒店管理,提高酒店工作效率、信息的准确性基本设置 客房管理 查看客房信息 新增客房信息 客房类型管理 查看客房类型信息 新增客房类型信息 客房状态管理业务管理 入住 退房注销数据库在DB_51aspx 文件夹中,附加即可用户名和密码是:51aspx【该源码由51aspx提供】

下载

立即学习Java免费学习笔记(深入)”;

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();以此类推。 遵循这一原则,即可彻底规避类型不匹配编译错误,并确保数据可正确、高效、跨平台地持久化与恢复。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

310

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

523

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

352

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

34

2025.11.30

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

361

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1505

2023.10.24

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

58

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 8.3万人学习

Java 教程
Java 教程

共578课时 | 55.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号