You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataOutputStream的writeUTF方法参数不匹配错误求助

问题分析与解决

错误原因

你的代码中调用DataOutputStream.writeUTF()方法时传入了非String类型的参数:accountObj.getBalance()是double类型,accountObj.getAccountNumber()是int类型,但writeUTF()仅接受String类型参数,因此触发编译错误。

解决方案

方案1:将数值转为String后写入

如果只需要把数值以文本形式存储,直接将double和int转为String即可,常用两种方式:

  • 使用String.valueOf()方法(推荐,可读性更高)
  • 利用字符串拼接自动转换(数值 + "")

修改后的代码:

for (Account accountObj : accounts) {
    System.out.print(accountObj);
    account.writeUTF(accountObj.getAccountHolderName());
    account.writeUTF(accountObj.getAccountType());
    account.writeUTF(String.valueOf(accountObj.getBalance()));
    account.writeUTF(String.valueOf(accountObj.getAccountNumber()));
}

方案2:使用数值专属写入方法(更适合后续还原数值)

如果后续需要将存储的值还原为double或int类型,推荐使用DataOutputStream提供的对应数值写入方法,这样读取时可以直接还原类型,避免字符串解析的麻烦:

  • double类型用writeDouble()
  • int类型用writeInt()

示例代码:

for (Account accountObj : accounts) {
    System.out.print(accountObj);
    account.writeUTF(accountObj.getAccountHolderName());
    account.writeUTF(accountObj.getAccountType());
    account.writeDouble(accountObj.getBalance());
    account.writeInt(accountObj.getAccountNumber());
}

注意:使用此方案时,读取数据必须严格遵循写入的顺序(先读两个UTF字符串,再读double,最后读int),否则会出现数据错乱。

内容的提问来源于stack exchange,提问作者gangrx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:01:03