ما هو أفضل نهج لتسلسل BigDecimal / BigInteger إلى ProtocolBuffers

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

  •  20-08-2019
  •  | 
  •  

سؤال

وأنا بدأت ترحيل آلية التسلسل مخصصة لبروتوكول المخازن. واحد نوع البيانات التي سيتم استخدامها ولا سيما بانتظام هو BigDecimal.

لا أحد يعرف من وسيلة جيدة لتسلسل هذه ضمن بروتوكول المخازن؟ يستخدم روتين حياتنا التسلسل الحالي BigDecimal.toPlainString() عن التسلسل، وnew BigDecimal(String) لإلغاء التسلسل - أفترض أن هناك طريقة أفضل

وتخميني هو لتحديد BigDecimal على النحو التالي:

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

ولكن لست متأكدا من كيفية تعريف BigInteger - ربما باستخدام طريقة toByteArray() لها

هل كانت مفيدة؟

المحلول

نعم. يجب عليك تحديد 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());
  }

نصائح أخرى

وماذا تريد تغييره؟ فقط لأنك تستطيع أو ليس هناك حاجة حقيقية (مثل جلسة التنميط مؤكدا أن التسلسل / إلغاء التسلسل يأخذ أكثر من مرة).

وأود أن استخدام سلسلة، لمجرد أنها بنيت في:)

وهذا النهج صفيف بايت المقترحة (<لأ href = "https://stackoverflow.com/questions/1051732/what-is-the-best-approach-for-serializing-bigdecimal-biginteger-to-protocolbuffer/1052049# 1052049 "> ما هو أفضل نهج لتسلسل BigDecimal / BigInteger إلى ProtocolBuffers ) ويبدو على ما يرام بالنسبة لي، إذا تمثيل سلسلة ويبدو أن هذه القضية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top