example java protocol-buffers

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?