Eu gostaria de um utilitário eficiente para gerar seqüências únicas de bytes. O UUID é um bom candidato, mas UUID.randomUUID().toString()
gera coisas como o 44e128a5-ac7a-4c9a-be4c-224b6bf81b20
que é bom, mas eu preferiria uma string sem traços.
Eu estou procurando uma maneira eficiente de gerar seqüências aleatórias, apenas a partir de caracteres alfanuméricos (sem traços ou outros símbolos especiais).
Respostas:
Faz isso:
fonte
Os traços não precisam ser removidos da solicitação HTTP, como você pode ver no URL deste segmento. Mas se você deseja preparar uma URL bem formada sem depender dos dados, deve usar URLEncoder.encode (dados da string, codificação da string) em vez de alterar a forma padrão dos dados. Para traços de representação de seqüência de caracteres UUID, é normal.
fonte
http://stackoverflow.com/questions/3804591/efficient-method-to-generate-uuid-string-in-java-uuid-randomuuid-tostring-w?rq=1
Acabei escrevendo algo próprio com base na implementação do UUID.java. Observe que não estou gerando um UUID , apenas uma sequência hexadecimal aleatória de 32 bytes da maneira mais eficiente possível.
Implementação
Uso
Testes
Algumas das entradas que testei para garantir que estão funcionando:
fonte
Eu usei o JUG (Java UUID Generator) para gerar um ID exclusivo. É único nas JVMs. Muito bom de usar. Aqui está o código para sua referência:
É possível baixar a biblioteca em: https://github.com/cowtowncoder/java-uuid-generator
fonte
java.util.UUID
alternativas sérias .Uma solução simples é
(Como as soluções existentes, apenas que evita a chamada String # replaceAll . A substituição da expressão regular não é necessária aqui, portanto, a String # replace parece mais natural, embora tecnicamente ainda seja implementada com expressões regulares. Dado que a geração do UUID é mais caro que a substituição, não deve haver uma diferença significativa no tempo de execução.)
O uso da classe UUID provavelmente é rápido o suficiente para a maioria dos cenários, embora eu esperasse que alguma variante escrita à mão especializada, que não precisa do pós-processamento, fosse mais rápida. De qualquer forma, o gargalo do cálculo geral será normalmente o gerador de números aleatórios. No caso da classe UUID, ele usa SecureRandom .
Qual gerador de números aleatórios a ser usado também é uma troca que depende do aplicativo. Se for sensível à segurança, o SecureRandom é, em geral, a recomendação. Caso contrário, o ThreadLocalRandom é uma alternativa (mais rápido que o SecureRandom ou o antigo Random , mas não criptograficamente seguro).
fonte
Estou surpreso ao ver tantas seqüências de caracteres substituindo idéias de UUID. Que tal agora:
Essa é a maneira mais rápida de fazer isso, pois todo o toString () do UUID já é mais caro, sem mencionar a expressão regular que deve ser analisada e executada ou a substituição por uma string vazia.
fonte
String.format("0x%016x%016x", f.getMostSignificantBits(), f.getLeastSignificantBits())
replace
.Acabei de copiar o método UUID toString () e atualizei-o para remover "-". Será muito mais rápido e direto do que qualquer outra solução
Uso:
generateUUIDString(UUID.randomUUID())
Outra implementação usando reflexão
fonte
Eu uso org.apache.commons.codec.binary.Base64 para converter um UUID em uma string exclusiva segura para URLs com 22 caracteres e com a mesma exclusividade que o UUID.
Publiquei meu código em Armazenando UUID como base64 String
fonte