BloomFilter.fromBytes constructor

BloomFilter.fromBytes(
  1. Uint8List data
)

Deserializes a Bloom filter from bytes.

The input should include the magic prefix (0xBF 0x00). Returns BloomFilter.empty if the data is malformed.

Implementation

factory BloomFilter.fromBytes(Uint8List data) {
  if (data.length < 7) return BloomFilter.empty();

  // Verify magic
  if (data[0] != kBloomFilterMagic[0] || data[1] != kBloomFilterMagic[1]) {
    return BloomFilter.empty();
  }

  final header = ByteData.view(data.buffer, data.offsetInBytes, 7);
  final bitCount = header.getUint32(2, Endian.little);
  final hashCount = header.getUint8(6);

  final expectedBytes = (bitCount + 7) ~/ 8;
  if (data.length < 7 + expectedBytes) return BloomFilter.empty();

  final bits = Uint8List.fromList(data.sublist(7, 7 + expectedBytes));
  return BloomFilter._(
    bits: bits,
    bitCount: bitCount,
    hashCount: hashCount,
  );
}