example - biginteger java max value
¿Cuál es el mejor enfoque para serializar BigDecimal/BigInteger a ProtocolBuffers? (2)
Sí. Debe definir BigInteger como BigInteger.toByteArray ().
Mi conjetura es que BigDecimal sería:
message BDecimal {
required int32 scale = 1;
required BInteger int_val = 2;
}
mientras que BigInteger puede definirse como
message BInteger {
required bytes value = 1;
}
El código para manejar BigInteger sería:
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());
}
Estoy empezando a migrar un mecanismo de serialización personalizado a Protocol Buffers. Un tipo de datos que se utilizará con especial regularidad es BigDecimal
.
¿Alguien sabe de una buena manera de serializar esto dentro de Protocol Buffers? Nuestra rutina de serialización actual utiliza BigDecimal.toPlainString()
para la serialización y el new BigDecimal(String)
para la deserialización. Supongo que hay una mejor manera.
Mi conjetura es definir un BigDecimal
como:
message BDecimal {
required int32 scale = 1;
required BInteger int_val = 2;
}
¿Pero no estoy seguro de cómo definir BigInteger
, tal vez usando su método toByteArray()
?
por que lo quieres cambiar? Solo porque puede o hay una necesidad real (como una sesión de perfiles que confirma, que la serialización / deserialización lleva la mayor parte del tiempo).
Yo usaría una cadena, solo porque está incorporada :)
El enfoque de matriz de bytes propuesto ( ¿Cuál es el mejor enfoque para serializar BigDecimal / BigInteger a ProtocolBuffers ) me parece bien, si la representación de cadenas parece ser un problema?