【问题标题】:BloomFilter to String and backBloomFilter 到 String 并返回
【发布时间】:2020-11-10 21:07:33
【问题描述】:

我想将 BloomFilter 转换为 String,存储它,然后从 String 中获取它。 如果我只使用字节数组而不转换为字符串 - 一切都很好:

    BloomFilter<Integer> filter = BloomFilter.create(
            Funnels.integerFunnel(),
            500,
            0.01);
    for (int i=0; i<400; i++) {
        filter.put(i);
    }

    System.out.println(filter.approximateElementCount());
    System.out.println(filter.expectedFpp());
    String s = "";
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    filter.writeTo(out);
    s = out.toString(Charset.defaultCharset());
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    BloomFilter<Integer> filter1 = BloomFilter.readFrom(in, Funnels.integerFunnel());
    System.out.println(filter1.approximateElementCount());
    System.out.println(filter1.expectedFpp());

我得到 equals 输出,但如果我将字节转换为字符串,然后将字符串转换为字节 - 结果是错误的,我得到的是 filter1.approximateElementCount() = 799 而不是 402。

ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes(Charset.defaultCharset()));

有没有办法将 BloomFilter 转换为 String 并返回?

【问题讨论】:

    标签: java guava bloom-filter


    【解决方案1】:

    any Charset 中将字节转换为字符串并返回并不总是可逆的。您必须使用诸如 Base64 之类的工具(在 Guava 中以 BaseEncoding.base64() 提供)将字节数组转换为字符串,以便您始终可以正确地将其转换回来。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多