ما هو أفضل نهج لتسلسل BigDecimal / BigInteger إلى ProtocolBuffers
-
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 ) ويبدو على ما يرام بالنسبة لي، إذا تمثيل سلسلة ويبدو أن هذه القضية.