Qual é a melhor abordagem para a serialização BigDecimal / BigInteger para ProtocolBuffers

StackOverflow https://stackoverflow.com/questions/1051732

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu estou começando a migrar um mecanismo de serialização personalizada para Protocol Buffers. Um tipo de dados que será usado particularmente regularmente é BigDecimal.

Alguém sabe de uma boa maneira de serialização isso dentro Protocol Buffers? Nossa serialização atual usos de rotina BigDecimal.toPlainString() para serialização e new BigDecimal(String) para desserialização -. Estou assumindo que há uma maneira melhor

Meu palpite é definir um BigDecimal como:

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

Mas eu não estou muito certo como definir BigInteger -? Talvez usando seu método toByteArray()

Foi útil?

Solução

Sim. Você deve definir BigInteger como BigInteger.toByteArray ().

Meu palpite é que BigDecimal seria:


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

enquanto BigInteger pode ser definida como


message BInteger {
  required bytes value = 1;
}

O código para lidar com BigInteger seria:


  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());
  }

Outras dicas

Por que você quer mudar isso? Apenas porque você pode ou há uma necessidade real (como uma sessão de perfil confirmando, que serialização / desserialização leva a maior parte do tempo).

Gostaria de usar uma corda, só porque ele é construído em:)

A abordagem proposta matriz de bytes ( Qual é a melhor abordagem para a serialização BigDecimal / BigInteger para ProtocolBuffers ) parece-me muito bem, se representação de cadeia parece ser um problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top