Каков лучший подход для сериализации BigDecimal/BigInteger к ProtocolBuffers

Настоящий программист любит open-source как родственную душу и любит Microsoft как грязную, но удовлетворяющую проститутку

24
задан Rich 16 March 2018 в 13:03
поделиться

2 ответа

Да. Вы должны определить 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());
  }
17
ответ дан 29 November 2019 в 00:23
поделиться

Почему вы хотите это изменить? Просто потому, что вы можете или есть реальная необходимость (например, сеанс профилирования, подтверждающий, что сериализация / десериализация занимает большую часть времени).

Я бы использовал строку, только потому, что она встроена:)

Предлагаемый Подход с байтовым массивом ( Каков наилучший подход для сериализации BigDecimal / BigInteger в ProtocolBuffers ) кажется мне нормальным, если строковое представление кажется проблемой.

0
ответ дан 29 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: