我想使用Jake Wharton的DiskLruCache for Android来将CouchDb文档缓存在磁盘上。 CouchDb ids只是任何JSON字符串,因此看起来Sömething/Like/Thís
。但是,图书馆的文档说明了
每个缓存条目都有一个字符串键和固定数量的值。每个密钥必须与正则表达式
[a-z0-9_-]{1,64}
匹配。
所以我需要一种方法来转换任意字符串以符合正则表达式[a-z0-9_-]{1,64}
,同时仍然是唯一的。我怎么能优雅地做到这一点?
答案 0 :(得分:1)
如何计算原始JSON字符串的64个字符散列并将此散列用作缓存的键?
但是,这并不能保证是独一无二的。但话说回来,将任何JSON字符串映射到* [a-z0-9 _-] {1,64} *将永远不会。
答案 1 :(得分:0)
从this question:你可以将原始字符串转换为字节的十六进制表示的字符串表示。
public String toHex(String arg) {
return String.format("%040x", new BigInteger(1, arg.getBytes("UTF-8")));
}
虽然这可能会产生明显大于前一个字符串的String,并且可能会溢出64个字符的限制。
答案 2 :(得分:-1)
如果要反转它,使用哈希是不可行的。 Base 64与您的要求不符,但您可以尝试类似的东西:
仅使用[a-z0-9_-]对每个字符进行编码,或者更确切地说,如果字符与[a-z0-9_]不匹配,请将其替换为以 - 开头的unicode值。