Какой метод рекомендуется использовать для сжатия десятичной дроби в строку без учета регистра? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть система обмена сообщениями, которая использует REST, Websockets AND Files на диске для передачи сообщений с Java по обеим сторонам соединения.Отправленные сообщения затем используются в качестве маркеров безопасности для запроса различных индексов и баз данных, и здесь размер имеет решающее значение.Я рассмотрел такие вещи, как Base64.encodeBase64 () с байтом Long, но он чувствителен к регистру и также не сильно экономит пространство.Я рассмотрел преобразование в hex и toString (), но экономия невелика по сравнению.Я ожидал бы, что для чего-то подобного существует отраслевой стандарт, и я либо очень не везу, либо идиот и не замечаю чего-то очень очевидного, либо использую неправильный язык.Нет фактического требования декодировать строку до тех пор, пока токен используется как есть на другой стороне, он просто должен быть уникальным, повторяемым, надежным и небольшим.

Я должен иметь возможность отправлять токены какпростые строки

Я должен иметь возможность повторного кодирования Long в строку

Токены должны быть без учета регистра (a == A)

Токены должны быть сжаты каквозможно, важен размер

Значения Long не имеют начальных 0, отрицательных чисел и десятичных знаков

1 Ответ

2 голосов
/ 23 апреля 2019

Base64 подходит только при чувствительности к регистру.

По сути, вам нужно определить, сколько символов вы можете использовать в качестве набора символов, и это определяет, насколько компактными будут строки.Чем больше символов, тем более компактны строки.

Звучит так, как будто вы можете использовать все буквы в верхнем регистре и все цифры.Это дает вам 36 символов и строки длиной до ceil(log(2^64)/log(36)) символов, т.е. 13.

например

String s = Long.toString(x, 36);
long l = Long.parseLong(s, 36);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...