当前位置:编程学习 > html/css >>

SimpleBloomFilter 持久化

[html] 
package bloom; 
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.util.BitSet; 
 
/** 
 * @author Keeny (2013-1-2) 
 **/ 
public class SimpleBloomFilter { 
    private static final int DEFAULT_SIZE = 2 << 24; 
    private static final int[] seeds = new int[] { 7, 11, 13, 31, 37, 61, }; 
    private BitSet bits = new BitSet(DEFAULT_SIZE); 
    private SimpleHash[] func = new SimpleHash[seeds.length]; 
 
    public static void main(String[] args) { 
        String fileName = "d:\\bloom\\BloomFilter.txt"; 
        String value = "stone2083@yahoo.cn"; 
        SimpleBloomFilter filter = new SimpleBloomFilter(); 
        BitSet bitSet = filter.readBit(fileName); 
        filter.setBits(bitSet); 
 
        System.out.println(filter.contains(value)); 
        filter.add(value); 
        System.out.println(filter.contains(value)); 
 
        filter.saveBit(fileName); 
    } 
 
    public void setBits(BitSet bits) { 
        this.bits = bits; 
    } 
 
    public void saveBit(String filename) { 
 
        try { 
            File file = new File(filename); 
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file, false)); 
            oos.writeObject(bits); 
            oos.flush(); 
            oos.close(); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
 
    public BitSet readBit(String filename) { 
        BitSet bits = new BitSet(DEFAULT_SIZE); 
        File file = new File(filename); 
        if (!file.exists()) { 
            return bits; 
        } 
        try { 
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); 
            bits = (BitSet) ois.readObject(); 
            ois.close(); 
 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } catch (ClassNotFoundException e) { 
            e.printStackTrace(); 
        } 
        return bits; 
    } 
 
    public SimpleBloomFilter() { 
        for (int i = 0; i < seeds.length; i++) { 
            func[i] = new SimpleHash(DEFAULT_SIZE, seeds[i]); 
        } 
    } 
 
    // 覆盖方法,把URL 添加进来 
    public void add(String value) { 
        for (SimpleHash f : func) { 
            bits.set(f.hash(value), true); 
        } 
    } 
 
    // 覆盖方法,是否包含URL 
    public boolean contains(String value) { 
        if (value == null) { 
            return false; 
        } 
        boolean ret = true; 
        for (SimpleHash f : func) { 
            ret = ret && bits.get(f.hash(value)); 
        } 
        return ret; 
    } 
 
    public static class SimpleHash { 
        private int cap; 
        private int seed; 
 
        public SimpleHash(int cap, int seed) { 
            this.cap = cap; 
            this.seed = seed; 
        } 
 
        public int hash(String value) { 
            int result = 0; 
            int len = value.length(); 
            for (int i = 0; i < len; i++) { 
                result = seed * result + value.charAt(i); 
            } 
            return (cap - 1) & result; 
        } 
    } 

package bloom;

import java.io.Fil

补充:web前端 , HTML/CSS  ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,