/** * Serialize a bloom filter: * Serialized BloomKFilter format: * 1 byte for the number of hash functions. * 1 big endian int(That is how OutputStream works) for the number of longs in the bitset * big endian longs in the BloomKFilter bitset * * @param out output stream to write to * @param bloomFilter BloomKFilter that needs to be serialized */ public static void serialize(OutputStream out, BloomKFilter bloomFilter) throws IOException { DataOutputStream dataOutputStream = new DataOutputStream(out); dataOutputStream.writeByte(bloomFilter.k); dataOutputStream.writeInt(bloomFilter.getBitSet().length); for (long value : bloomFilter.getBitSet()) { dataOutputStream.writeLong(value); } }
@Override public long getAggregationBufferFixedSize() { if (bitSetSize < 0) { // Not pretty, but we need a way to get the size try { Aggregation agg = (Aggregation) getNewAggregationBuffer(); bitSetSize = agg.bf.getBitSet().length; } catch (Exception e) { throw new RuntimeException("Unexpected error while creating AggregationBuffer", e); } } // BloomFilter: object(BitSet: object(data: long[]), numBits: int, numHashFunctions: int) JavaDataModel model = JavaDataModel.get(); long bloomFilterSize = JavaDataModel.alignUp(model.object() + model.lengthForLongArrayOfSize(bitSetSize), model.memoryAlign()); return JavaDataModel.alignUp( model.object() + bloomFilterSize + model.primitive1() + model.primitive1(), model.memoryAlign()); }
/** * Serialize a bloom filter * * @param out output stream to write to * @param bloomFilter BloomKFilter that needs to be seralized */ public static void serialize(OutputStream out, BloomKFilter bloomFilter) throws IOException { /** * Serialized BloomKFilter format: * 1 byte for the number of hash functions. * 1 big endian int(That is how OutputStream works) for the number of longs in the bitset * big endina longs in the BloomKFilter bitset */ DataOutputStream dataOutputStream = new DataOutputStream(out); dataOutputStream.writeByte(bloomFilter.k); dataOutputStream.writeInt(bloomFilter.getBitSet().length); for (long value : bloomFilter.getBitSet()) { dataOutputStream.writeLong(value); } }