gpt4 book ai didi

java - 将 BigDecimal/BigInteger 序列化为 ProtocolBuffers 的最佳方法是什么

转载 作者:IT老高 更新时间:2023-10-28 20:35:34 27 4
gpt4 key购买 nike

我开始将自定义序列化机制迁移到 Protocol Buffer 。一种特别经常使用的数据类型是 BigDecimal

有谁知道在 Protocol Buffer 中序列化它的好方法吗?我们当前的序列化例程使用 BigDecimal.toPlainString() 进行序列化,使用 new BigDecimal(String) 进行反序列化 - 我假设有更好的方法。

我的猜测是将 BigDecimal 定义为:

message BDecimal {
required int32 scale = 1;
required BInteger int_val = 2;
}

但我不太确定如何定义 BigInteger - 也许使用它的 toByteArray() 方法?

最佳答案

是的。您应该将 BigInteger 定义为 BigInteger.toByteArray() 。

我的猜测是 BigDecimal 会是:


message BDecimal {
required int32 scale = 1;
required BInteger int_val = 2;
}

而 BigInteger 可以定义为


message BInteger {
required bytes value = 1;
}

处理 BigInteger 的代码是:


BInteger write(BigInteger val) {
BInteger.Builder builder = BInteger.newBuilder();
ByteString bytes = ByteString.copyFrom(val.toByteArray());
builder.setValue(bytes);
return builder.build();
}

BigInteger read(BInteger message) {
ByteString bytes = message.getValue();
return new BigInteger(bytes.toByteArray());
}

关于java - 将 BigDecimal/BigInteger 序列化为 ProtocolBuffers 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com