【发布时间】:2011-06-02 05:37:58
【问题描述】:
现在,这并不是严格意义上的 URL 缩短,但无论如何我的目的是这样的,所以让我们这样看待它。当然 URL 缩短的步骤是:
- 获取完整网址
- 生成唯一的短字符串作为 URL 的键
- 将 URL 和键存储在数据库中(键值存储在这里是完美的匹配)
现在,关于第二点。这是我想出的:
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
这够好吗?
【问题讨论】:
-
出于好奇,为什么要使用 UUID?例如,为什么不从 Random 实例生成 5 个左右的字节?
-
我开始使用随机/System.nanoTime/mac 地址'位然后意识到 uuid 拥有所有这些 :-)
-
@Bozho 您可能需要考虑Base32 encoding aka Crockford encoding,因为它具有一些优点,例如删除可能不明确的字符,例如 0 和字母 L。您最终会得到更长的短 URL,但如果您不这样做拥有数十亿可能值得。
标签: java url url-shortener