Ahora bien, esto no se trata estrictamente del acortamiento de URL, pero mi propósito es tal de todos modos, así que vamos a verlo así. Por supuesto, los pasos para el acortamiento de URL son:Algoritmo de acortamiento de URL
- Toma la URL completa
- generar una cadena corta única para ser la clave para la URL
- tienda de la URL y la clave en una base de datos (un número- tienda de valores sería una combinación perfecta aquí)
Ahora, sobre el segundo punto. Esto es lo que se me ocurrió:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
UUID uuid = UUID.randomUUID();
dos.writeLong(uuid.getMostSignificantBits());
String encoded = new String(Base64.encodeBase64(baos.toByteArray()), "ISO-8859-1");
String shortUrlKey = StringUtils.left(encoded, 6); // returns the leftmost 6 characters
// check if exists in database, repeat until it does not
¿Es esto lo suficientemente bueno?
Por curiosidad, ¿por qué molestarse con un UUID? ¿Por qué no, por ejemplo, solo generar 5 o más bytes de una instancia aleatoria? –
Comencé con un bit aleatorio/System.nanoTime/the mac address 'y luego me di cuenta de que uuid tiene todo esto :-) – Bozho
@Bozho es posible que desee considerar [codificación Base32 aka codificación Crockford] (http: //www.crockford .com/wrmg/base32.html) ya que tiene algunas ventajas, como eliminar caracteres potencialmente ambiguos como 0 y la letra L. Tendrá una URL corta más larga, pero si no tiene miles de millones, puede que valga la pena. –