在 Java 中,Double(双精度浮点数)的序列化有多种方式,取决于你使用的序列化框架或场景。下面按常见情况逐一说明。
如果 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是自动支持的
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;
}
Gson gson = new Gson();
Double d = 2.718281828459045;
String json = gson.toJson(d);
Double result = gson.fromJson(json, Double.class);
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);
✅ 适合文件、网络传输、配置文件
double d = 3.14;
long bits = Double.doubleToLongBits(d);
ByteBuffer buffer = ByteBuffer.allocate(8);
buffer.putLong(bits);
byte[] bytes = buffer.array();
ByteBuffer buffer = ByteBuffer.wrap(bytes);
double value = Double.longBitsToDouble(buffer.getLong());
✅ 适合高性能、低延迟场景
double 是基础类型,天然支持Doublekryo.writeObject(out, doubleValue)0.1 + 0.2 != 0.3
Double 可能变成:
3.0 → 3.0NaN / Infinity(部分框架不支持)BigDecimal| 方式 | 适用场景 |
|---|---|
| Java Serializable | Java 内部 |
| JSON | Web / 跨语言 |
| String | 简单通用 |
| ByteBuffer | 高性能 |
| Protobuf | RPC / 存储 |
如果你有具体使用场景(如 Redis、MQ、HTTP、文件),我可以给你更合适的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。