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