本系列:
- 《手把手教你写网络爬虫(1):网易云音乐歌单》
- 《手把手教你写网络爬虫(2):迷你爬虫架构》
- 《手把手教你写网络爬虫(3):开源爬虫框架对比》
- 《手把手教你写网络爬虫(4):Scrapy入门》
- 《手把手教你写网络爬虫(5):PhantomJS实战》
- 《手把手教你写网络爬虫(6):分布式爬虫》
IPv6编码地址数:2^128(约3.4×10^38)
IPv6是IETF设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,号称可以为全世界的每一粒沙子编上一个网址。
- public <T> boolean put(T object, Funnel<? super T> funnel, int numHashFunctions, BitArray bits) {
- long bitSize = bits.bitSize();
- long hash64 = Hashing.murmur3_128().hashObject(object, funnel).asLong();
- int hash1 = (int) hash64;
- int hash2 = (int) (hash64 >>> 32);
- boolean bitsChanged = false;
- for (int i = 1; i <= numHashFunctions; i++) {
- int combinedHash = hash1 + (i * hash2);
- // Flip all the bits if it's negative (guaranteed positive number)
- if (combinedHash < 0) {
- combinedHash = ~combinedHash;
- }
- bitsChanged |= bits.set(combinedHash % bitSize);
- }
- return bitsChanged;
- }
- boolean set(long index) {
- if (!get(index)) {
- data[(int) (index >>> 6)] |= (1L << index);
- bitCount++;
- return true;
- }
- return false;
- }
- boolean get(long index) {
- return (data[(int) (index >>> 6)] & (1L << index)) != 0;
- }
02 先get()一下,看看是不是已经置为1。
03 index右移6位就是除以64,说明data是long型的数组,除以64就定位到了bit所在的数组下标。1L左移index位,定位到了bit在long中的位置。