Оптимальный масштаб BigDecimal для кодирования

Мне нужно компактно закодировать BigDecimal в ByteBuffer для замены моей текущей (мусорной) схемы кодирования (запись BigDecimal как UTF-8 кодированной String с префиксом байта, обозначающего длину String).

Учитывая, что BigDecimal - это фактически целочисленное значение (в математическом смысле) и связанная с ним шкала, я планирую записывать шкалу в виде одного байта, за которым следует VLQ-кодированное целое число. Это должно адекватно покрыть диапазон ожидаемых значений (т.е. максимальная шкала 127).

Мой вопрос: При встрече с большими значениями, такими как 10,000,000,000, очевидно, оптимальным будет закодировать их как значение: 1 с масштабом -10, а не кодировать целое число 10,000,000,000 с масштабом 0 (что займет больше байт). Как я могу определить оптимальный масштаб для данного BigDecimal? ... Другими словами, как я могу определить минимально возможный масштаб, который я задаю для BigDecimal без необходимости выполнять какое-либо округление?

Пожалуйста, не используйте термин "преждевременная оптимизация" в ваших ответах :-)

6
задан Adamski 21 October 2011 в 09:12
поделиться