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]); } }
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; }