我正在创建一个方法,它将接受UUID (作为字符串)作为输入,并生成一个40字节(固定)的输出(通过向其中添加一些更多信息)。UUID字符串本身的长度为36个字符(32个字符+4个连字符)。
我需要让它适合大约16个字符的东西。因为我们将这个uuid作为输入,所以这是我们的标识符,我们不想丢失它(我们可能需要用这个16个字符的表示重新生成uuid )。
第二件事是,我们不确定我们是否总是会收到UUID作为输入,在未来这可能是50个字符长度的随机序列,所以需要为这个生成固定的16个字符长度的随机序列(也是可逆的)。
有没有为可变长度的随机输入生成固定长度字节的好方法?需要确保唯一性,我们也希望可变长度的随机输入返回固定长度的字节。
谢谢你的帮助。
发布于 2014-03-05 17:25:13
您必须保留一个数据库表来将小键映射到大键。这样你以后就可以查找了。这是对您需求的100%支持
另一种方式是,
假设36个字符的UUID仅包含0123456789ABCDEF字符+4个不在随机位置的下部,
即abcdef14-15293abd-92835a5e-2524fa32
我们可以简单地用4位来表示每个字符。0 -> 0000、1 -> 0001、A -> 1010、B -> 1011等...
如果我们将两个4位数字放在一起作为一个8位字符,我们将得到16个字符。
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
public class Buffer{
public static void main(String args[]) throws Exception{
String input = "abcdef14-15293abd-92835a5e-2524fa32";
String[] hexNums = input.split("-");
ByteBuffer buffer = ByteBuffer.allocate(16);
for(int i =0 ; i < 4; i++){
long num = Long.parseLong(hexNums[i], 16);
buffer.putInt((int)(num + Integer.MIN_VALUE));
}
byte[] bytes = buffer.array();
String v = new String(bytes,"UTF-8");
System.out.println(v);
}
}https://stackoverflow.com/questions/22191594
复制相似问题