Мне нужно компактно кодировать BigDecimal
в ByteBuffer
, чтобы заменить мою текущую (мусорную) схему кодирования (запись BigDecimal
в кодировке UTF-8 String
с префиксом байта, обозначающего String
длина).
Учитывая, что BigDecimal
фактически является целочисленным значением (в математическом смысле) и связанной шкалой, я планирую записать шкалу в виде одного байта, за которым следует VLQ-кодированный целое числоЭто должно адекватно охватывать диапазон ожидаемых значений (т. Е. Максимальная шкала 127).
Мой вопрос: при обнаружении больших значений, таких как 10 000 000 000, явно оптимальным является кодирование этого значения: 1 со шкалой -10вместо того, чтобы кодировать целое число 10 000 000 000 со шкалой 0 (которая будет занимать больше байтов).Как я могу определить оптимальный масштаб для данного BigDecimal
?... Другими словами, как я могу определить минимально возможную шкалу, которую я установил, присваивая BigDecimal
без необходимости какого-либо округления?
Пожалуйста, не упоминайте термин "преждевременная оптимизация" в ваших ответах: -)