温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Double双精度如何序列化

发布时间:2026-09-15 04:31:17 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

在 Java 中,Double(双精度浮点数)的序列化有多种方式,取决于你使用的序列化框架或场景。下面按常见情况逐一说明。


一、Java 原生序列化(Serializable)

如果 Double 是某个类的字段,且该类实现了 Serializable

import java.io.*;

public class Demo implements Serializable {
    private Double value;

    public Demo(Double value) {
        this.value = value;
    }
}

序列化:

Demo demo = new Demo(3.141592653589793);
try (ObjectOutputStream oos =
             new ObjectOutputStream(new FileOutputStream("demo.bin"))) {
    oos.writeObject(demo);
}

反序列化:

try (ObjectInputStream ois =
             new ObjectInputStream(new FileInputStream("demo.bin"))) {
    Demo demo = (Demo) ois.readObject();
    System.out.println(demo.value);
}

✅ Java 原生序列化对 Double 是自动支持的


二、JSON 序列化(最常用)

1️⃣ Jackson

ObjectMapper mapper = new ObjectMapper();
Double d = 3.141592653589793;

// 序列化
String json = mapper.writeValueAsString(d);
// "3.141592653589793"

// 反序列化
Double result = mapper.readValue(json, Double.class);

如果是对象:

class Model {
    public Double price;
}

2️⃣ Gson

Gson gson = new Gson();
Double d = 2.718281828459045;

String json = gson.toJson(d);
Double result = gson.fromJson(json, Double.class);

3️⃣ Fastjson

String json = JSON.toJSONString(3.14);
Double d = JSON.parseObject(json, Double.class);

三、字符串方式(通用、跨语言)

Double d = 1.23456789;

// 序列化
String s = d.toString();

// 反序列化
Double result = Double.parseDouble(s);

✅ 适合文件、网络传输、配置文件


四、二进制方式(高效)

1️⃣ 转为 byte[]

double d = 3.14;
long bits = Double.doubleToLongBits(d);
ByteBuffer buffer = ByteBuffer.allocate(8);
buffer.putLong(bits);
byte[] bytes = buffer.array();

2️⃣ 还原

ByteBuffer buffer = ByteBuffer.wrap(bytes);
double value = Double.longBitsToDouble(buffer.getLong());

✅ 适合高性能、低延迟场景


五、Protobuf / Hessian / Kryo 等

  • Protobufdouble 是基础类型,天然支持
  • Hessian:自动支持 Double
  • Kryo:直接 kryo.writeObject(out, doubleValue)

六、注意事项(很重要)

  1. 精度问题
    0.1 + 0.2 != 0.3
    
  2. JSON 中 Double 可能变成:
    • 3.03.0
    • NaN / Infinity(部分框架不支持)
  3. 如果业务强依赖精度,考虑:
    • BigDecimal
    • 或字符串传输

总结

方式 适用场景
Java Serializable Java 内部
JSON Web / 跨语言
String 简单通用
ByteBuffer 高性能
Protobuf RPC / 存储

如果你有具体使用场景(如 Redis、MQ、HTTP、文件),我可以给你更合适的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI