Was ist der beste Ansatz BigDecimal / BigInteger zu Protocol Buffers für die Serialisierung

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

  •  20-08-2019
  •  | 
  •  

Frage

Ich beginne eine benutzerdefinierte Serialisierung Mechanismus Protocol Buffers zu migrieren. Ein Datentyp, der verwendet wird, besonders regelmäßig ist BigDecimal.

Kennt jemand eine gute Möglichkeit, dies zu Serialisierung innerhalb Protocol Buffers? Unsere aktuelle Serialisierung Routine verwendet BigDecimal.toPlainString() für die Serialisierung und new BigDecimal(String) für die Deserialisierung -. Ich gehe davon aus, es gibt einen besseren Weg,

Meine Vermutung ist ein BigDecimal zu definieren:

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

Aber ich bin nicht sicher, wie BigInteger definieren - vielleicht seine toByteArray() Methode mit

War es hilfreich?

Lösung

Ja. Sie sollten BigInteger als BigInteger.toByteArray definieren ().

Meine Vermutung ist, dass BigDecimal wäre:


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

während BigInteger als

definiert werden

message BInteger {
  required bytes value = 1;
}

Der Code BigInteger zu handhaben wäre:


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

Andere Tipps

Warum wollen Sie es ändern? Gerade weil Sie können, oder gibt es einen echten Bedarf (wie eine Profilierungs Sitzung bestätigt, dass die Serialisierung / Deserialisierung den größten Teil der Zeit in Anspruch nimmt).

Ich würde eine Zeichenfolge verwenden, nur weil es eingebaut ist:)

Der vorgeschlagene Byte-Array-Ansatz ( Was ist der beste Ansatz BigDecimal / BigInteger zu Protocol Buffers für die Serialisierung ) scheint mich in Ordnung, wenn String-Darstellung scheint ein Problem zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top