我们正在尝试实现IPv6地址的最初前缀匹配。表示IPv6地址以有效执行此计算(最长前缀匹配)的最佳方法是什么。
IPv6地址通常以Array [Byte]表示。 (IPv6地址通常用Array [Byte] [16]表示)。
要找到最长的前缀匹配,我们需要将地址转换为BitSet(或某种位的数组表示),然后找出最长的前缀。
这个堆栈级别的新手,并想知道我是否有任何遗漏。
任何有助于我向正确方向前进的指针都非常受欢迎。
仅供参考,这是在Scala上。 (因此任何与JVM相关的指针都会有所帮助)
答案 0 :(得分:0)
如果您只保留原始的两个阵列并使用while循环扫描字节,直到它们不相同,那么您应该尽可能快。一旦你受到了打击,如果你想知道它是什么位,请使用
java.lang.Integer.numberOfLeadingZeros((a[i] << 24) ^ (b[i] << 24))
计算i
索引中的位数(假设a
和b
是您的数组)匹配。
首先可以考虑转换为更大的数字类型,例如Long
,但通常你会花费尽可能多的时间进行转换,就像找到匹配一样,所以除非你有一堆更多要对地址进行逐位数学运算,您也可以将其保存为字节。