我读过base64转换,我理解的是原始数据的编码版本将是原始大小的133%。在
然后,我读到了YouTube是如何在视频中拥有唯一标识符的,比如FJZQSHn7fc
,原因是:一个11个字符的base64字符串可以映射到一个巨大的数字。在
等等,假设一个巨大的数字包含20个字符,那么一个base64编码的字符串不会是这个大小的133%,而不是更短吗?在
我很困惑。是否存在不同类型的base64转换(字符串转换为base64,十进制转换为base64),一次导致较大的转换,另一次转换为较小的结果字符串?在
Tags:
你搞不清在比较什么东西。 有两种说法,都比较不同的东西:
在1的情况下,它们通常指的是用ASCII编码的字符串,使用8位a字符,并将其与base64编码的相同字符串进行比较。这个数字要大133%,因为在base64中,不能在每个字节中使用所有255位的组合。在
在2的情况下,他们使用数字标识符进行比较,然后将其编码为base64或base10。在本例中,base64比base10短很多。在
您还可以将(1)案例视为比较base256与base64,将(2)案例视为比较base10与base64。在
以64为基数的每个字符可以编码6位数据。因此,11个字符可以编码6x11=66位的数据。在
73786976294838206464(约7.4 x 10^19或74.5万亿)可能的标识符足以在可预见的未来区分独特的YouTube视频。在
YouTube不太可能将这些长度为11的字符串用作较小对象的编码。你可以使用base64(毕竟只是一个以64为基数的数字),而不必把它当作其他编码,就像你可以使用字节(8位二进制数),而不把这些字节看作是ascii字符的编码一样。标识符方案唯一重要的问题是是否有足够多的标识符。在这种情况下,显然有。在
可以这样想:您有一个64位的数字(例如在Java中称为long)。在
现在,您可以用不同的方法打印该数字:
看起来它们使用的base64数字与base64编码中使用的相同,即大小写字母、普通数字和2个额外字符。每个字符代表一个6位值。所以你得到了66位,根据使用的算法,无论是前导还是尾随的2位都被切掉,以得到一个很好的long值。在
相关问题 更多 >
编程相关推荐