Я хотел бы эффективную утилиту для генерации уникальных последовательностей байтов. UUID - хороший кандидат, но UUID.randomUUID().toString()
генерирует что-то вроде 44e128a5-ac7a-4c9a-be4c-224b6bf81b20
этого, но я бы предпочел строку без тире.
Я ищу эффективный способ генерировать случайные строки, только из буквенно-цифровых символов (без черточек или любых других специальных символов).
Ответы:
Это делает это:
источник
Черточки не нужно удалять из HTTP-запроса, как вы можете видеть в URL этой темы. Но если вы хотите подготовить правильно сформированный URL без зависимости от данных, вы должны использовать URLEncoder.encode (String data, String encoding) вместо изменения стандартной формы ваших данных. Для строкового представления UUID штрихи нормальны.
источник
http://stackoverflow.com/questions/3804591/efficient-method-to-generate-uuid-string-in-java-uuid-randomuuid-tostring-w?rq=1
Закончил писать что-то свое на основе реализации UUID.java. Обратите внимание, что я не генерирую UUID , а просто случайную шестнадцатеричную строку в байтах наиболее эффективным способом, о котором я мог подумать.
Реализация
использование
тесты
Некоторые из входов, которые я протестировал, чтобы убедиться, что они работают:
источник
Я использовал JUG (Java UUID Generator) для генерации уникального идентификатора. Это уникально среди JVM. Довольно хорошо использовать. Вот код для вашей справки:
Вы можете скачать библиотеку с: https://github.com/cowtowncoder/java-uuid-generator
источник
java.util.UUID
альтернатив.Простое решение
(Как и в существующих решениях, только то, что он избегает вызова String # replaceAll . Замена регулярных выражений здесь не требуется, поэтому String # replace кажется более естественным, хотя технически он все еще реализован с помощью регулярных выражений. Учитывая, что генерация UUID более дорогостоящий, чем замена, не должно быть значительной разницы во времени выполнения.)
Использование класса UUID, вероятно, достаточно быстро для большинства сценариев, хотя я ожидаю, что какой-то специализированный рукописный вариант, который не требует постобработки, будет быстрее. В любом случае, узким местом всех вычислений обычно является генератор случайных чисел. В случае класса UUID он использует SecureRandom .
Какой генератор случайных чисел использовать, также является компромиссом, который зависит от приложения. Если это чувствительно к безопасности, SecureRandom, как правило, является рекомендацией. Иначе, ThreadLocalRandom является альтернативой (быстрее, чем SecureRandom или старый Random , но не криптографически безопасен).
источник
Я поражен, увидев, что так много строк заменяет идеи UUID. Как насчет этого:
Это быстрый способ сделать это, поскольку весь метод toString () UUID уже стоит дороже, не говоря уже о регулярном выражении, которое необходимо проанализировать и выполнить, или о замене пустой строкой.
источник
String.format("0x%016x%016x", f.getMostSignificantBits(), f.getLeastSignificantBits())
replace
.Я только что скопировал метод toString () UUID и просто обновил его, чтобы удалить из него «-». Это будет намного быстрее и понятнее, чем любое другое решение.
Использование:
generateUUIDString(UUID.randomUUID())
Еще одна реализация с использованием отражения
источник
Я использую org.apache.commons.codec.binary.Base64, чтобы преобразовать UUID в уникальную строку, безопасную для URL, длиной 22 символа и обладающую той же уникальностью, что и UUID.
Я разместил свой код в хранилище UUID как base64 String
источник
Я только что реализовал этот служебный класс, который создает UUID как String с или без черточек . Не стесняйтесь использовать и делиться. Я надеюсь, что это помогает!
Это вывод:
источник