public void serialize(BloomFilter bf, DataOutput dos) throws IOException {
    int bitLength = bf.bitset.getNumWords();
    int pageSize = bf.bitset.getPageSize();
    int pageCount = bf.bitset.getPageCount();

    dos.writeInt(bf.getHashCount());
    dos.writeInt(bitLength);

    for (int p = 0; p < pageCount; p++) {
      long[] bits = bf.bitset.getPage(p);
      for (int i = 0; i < pageSize && bitLength-- > 0; i++) dos.writeLong(bits[i]);
    }
  }
Пример #2
0
  public void serializeToFile(Context context) {
    if (this.bloomFilter == null) return;

    try {
      FileOutputStream fout = context.openFileOutput(DIRECTORY_FILE, 0);
      String numberFilter = Base64.encodeBytes(bloomFilter.getFilter());
      NumberFilterStorage storage =
          new NumberFilterStorage(numberFilter, bloomFilter.getHashCount());

      storage.serializeToStream(fout);
      fout.close();
    } catch (IOException ioe) {
      Log.w("NumberFilter", ioe);
    }
  }
  /**
   * Calculates a serialized size of the given Bloom Filter
   *
   * @see BloomFilterSerializer#serialize(BloomFilter, DataOutput)
   * @param bf Bloom filter to calculate serialized size
   * @return serialized size of the given bloom filter
   */
  public long serializedSize(BloomFilter bf, TypeSizes typeSizes) {
    int bitLength = bf.bitset.getNumWords();
    int pageSize = bf.bitset.getPageSize();
    int pageCount = bf.bitset.getPageCount();

    int size = 0;
    size += typeSizes.sizeof(bf.getHashCount()); // hash count
    size += typeSizes.sizeof(bitLength); // length

    for (int p = 0; p < pageCount; p++) {
      long[] bits = bf.bitset.getPage(p);
      for (int i = 0; i < pageSize && bitLength-- > 0; i++)
        size += typeSizes.sizeof(bits[i]); // bucket
    }
    return size;
  }