Bây giờ, điều này không nghiêm chỉnh về việc rút ngắn URL, nhưng mục đích của tôi là như vậy, vì vậy hãy xem nó như thế. Tất nhiên các bước để URL rút ngắn là:Thuật toán rút ngắn URL
- Hãy URL đầy đủ
- Tạo một chuỗi ngắn độc đáo là chìa khóa cho URL
- Store URL và chìa khóa trong một cơ sở dữ liệu (một Key- cửa hàng giá trị sẽ là đối sánh hoàn hảo tại đây)
Bây giờ, về điểm thứ hai. Dưới đây là những gì tôi đã đưa ra:
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
Điều này có đủ không?
Ngoài sự tò mò, tại sao lại bận tâm với UUID? Tại sao không ví dụ như chỉ tạo ra 5 hoặc nhiều byte từ một thể hiện ngẫu nhiên? –
Tôi bắt đầu wit một ngẫu nhiên/System.nanoTime/địa chỉ mac 'bit sau đó nhận ra rằng uuid có tất cả các :-) – Bozho
@Bozho bạn có thể muốn xem xét [Base32 mã hóa aka Crockford mã hóa] (http: //www.crockford .com/wrmg/base32.html) vì nó có một số ưu điểm như loại bỏ các ký tự có thể mơ hồ như 0 và chữ L. Bạn sẽ kết thúc bằng một URL ngắn hơn nhưng nếu bạn không có hàng tỷ thì có thể đáng giá. –