Example usage for com.google.common.hash PrimitiveSink putBytes

List of usage examples for com.google.common.hash PrimitiveSink putBytes

Introduction

In this page you can find the example usage for com.google.common.hash PrimitiveSink putBytes.

Prototype

PrimitiveSink putBytes(byte[] bytes);

Source Link

Document

Puts an array of bytes into this sink.

Usage

From source file:com.jordanwilliams.heftydb.test.performance.table.file.TableBloomFilterPerformance.java

public static void main(String[] args) throws Exception {
    TestFileHelper.createTestDirectory();
    KeyValueGenerator keyValueGenerator = new KeyValueGenerator();
    Value value = new Value(keyValueGenerator.testValue(100));

    System.out.println("Writing bloom filter");

    Paths paths = ConfigGenerator.testPaths();
    TableBloomFilterWriter filterWriter = TableBloomFilterWriter.open(1, paths, RECORD_COUNT);
    BloomFilter<Key> guavaFilter = BloomFilter.create(new Funnel<Key>() {
        @Override/*from   w  w w .j  a  v a  2 s.c om*/
        public void funnel(Key key, PrimitiveSink primitiveSink) {
            primitiveSink.putBytes(key.data().array());
        }
    }, RECORD_COUNT, 0.01);

    for (int i = 0; i < RECORD_COUNT; i++) {
        value.data().rewind();
        filterWriter.write(new Key(ByteBuffers.fromString(i + ""), i));
        guavaFilter.put(new Key(ByteBuffers.fromString(i + ""), i));
    }

    filterWriter.finish();

    System.out.println("Reading bloom filter");

    TableBloomFilter tableBloomFilter = TableBloomFilter.read(1, paths);

    double hits = 0;
    double misses = 0;

    double ghits = 0;
    double gmisses = 0;

    for (int i = RECORD_COUNT * 2; i > RECORD_COUNT; i--) {
        if (tableBloomFilter.mightContain(new Key(ByteBuffers.fromString(i + ""), i))) {
            hits++;
        } else {
            misses++;
        }

        if (guavaFilter.mightContain(new Key(ByteBuffers.fromString(i + ""), i))) {
            ghits++;
        } else {
            gmisses++;
        }
    }

    System.out.println("False positive rate: " + hits / (hits + misses));
    System.out.println("Guava positive rate: " + ghits / (ghits + gmisses));

    TestFileHelper.cleanUpTestFiles();
}

From source file:com.cinchapi.concourse.server.storage.cache.ByteableFunnel.java

@Override
public void funnel(Composite from, PrimitiveSink into) {
    into.putBytes(ByteBuffers.toByteArray(from.getBytes()));
}

From source file:iox.easycache.internal.AnyFunnel.java

@Override
public void funnel(Object data, PrimitiveSink sink) {
    sink.putByte(MARK);//w  ww.  j a v a2s. com
    if (data == null)
        sink.putByte(NUL);
    else if (data instanceof byte[])
        sink.putBytes((byte[]) data);
    else if (data instanceof char[])
        sink.putString(new CharArray((char[]) data), Util.UTF);
    else if (data instanceof String)
        sink.putString((String) data, Util.UTF);
    else if (data instanceof boolean[]) {
        for (boolean e : (boolean[]) data)
            sink.putBoolean(e);
    } else if (data instanceof short[]) {
        for (short e : (short[]) data)
            sink.putShort(e);
    } else if (data instanceof int[]) {
        for (int e : (int[]) data)
            sink.putInt(e);
    } else if (data instanceof long[]) {
        for (long e : (long[]) data)
            sink.putLong(e);
    } else if (data instanceof float[]) {
        for (float e : (float[]) data)
            sink.putFloat(e);
    } else if (data instanceof double[]) {
        for (double e : (double[]) data)
            sink.putDouble(e);
    } else if (data instanceof Object[]) {
        for (Object e : (Object[]) data)
            funnel(e, sink);
    } else if (data instanceof Boolean)
        sink.putBoolean((Boolean) data);
    else if (data instanceof Byte)
        sink.putByte((Byte) data);
    else if (data instanceof Character)
        sink.putChar((Character) data);
    else if (data instanceof Short)
        sink.putShort((Short) data);
    else if (data instanceof Integer)
        sink.putInt((Integer) data);
    else if (data instanceof Long)
        sink.putLong((Long) data);
    else if (data instanceof Float)
        sink.putFloat((Float) data);
    else if (data instanceof Double)
        sink.putDouble((Double) data);
    else {
        putObject(data, sink);
    }
}

From source file:io.github.maxymania.powercache.hash.AnyFunnel.java

private void funnel(Object data, PrimitiveSink sink, int dept) {
    if (dept > 80) {
        sink.putByte(ONE);//from   www  .ja va 2 s .com
        return;
    }
    sink.putByte(MARK);
    if (data == null) {
        sink.putByte(NUL);
    } else if (data instanceof byte[]) {
        sink.putBytes((byte[]) data);
    } else if (data instanceof char[]) {
        sink.putString(new CharArray((char[]) data), Util.UTF);
    } else if (data instanceof String) {
        sink.putString((String) data, Util.UTF);
    } else if (data instanceof boolean[]) {
        for (boolean e : (boolean[]) data) {
            sink.putBoolean(e);
        }
    } else if (data instanceof short[]) {
        for (short e : (short[]) data) {
            sink.putShort(e);
        }
    } else if (data instanceof int[]) {
        for (int e : (int[]) data) {
            sink.putInt(e);
        }
    } else if (data instanceof long[]) {
        for (long e : (long[]) data) {
            sink.putLong(e);
        }
    } else if (data instanceof float[]) {
        for (float e : (float[]) data) {
            sink.putFloat(e);
        }
    } else if (data instanceof double[]) {
        for (double e : (double[]) data) {
            sink.putDouble(e);
        }
    } else if (data instanceof Object[]) {
        for (Object e : (Object[]) data) {
            funnel(e, sink);
        }
    } else if (data instanceof Boolean) {
        sink.putBoolean((Boolean) data);
    } else if (data instanceof Byte) {
        sink.putByte((Byte) data);
    } else if (data instanceof Character) {
        sink.putChar((Character) data);
    } else if (data instanceof Short) {
        sink.putShort((Short) data);
    } else if (data instanceof Integer) {
        sink.putInt((Integer) data);
    } else if (data instanceof Long) {
        sink.putLong((Long) data);
    } else if (data instanceof Float) {
        sink.putFloat((Float) data);
    } else if (data instanceof Double) {
        sink.putDouble((Double) data);
    } else {
        putObject(data, sink, dept);
    }
}

From source file:com.heliosapm.opentsdb.client.opentsdb.OTMetric.java

/**
 * Creates a new OTMetric// ww w.j a v  a 2  s.  co m
 * @param flatName The plain flat name from the Metric name
 * @param nprefix The optional prefix which is prefixed to the flat name
 * @param extension The optional extension which is appended to the TSDB metric name
 * @param extraTags The optional extra tags to add
 */
OTMetric(final String flatName, final String nprefix, final String extension,
        final Map<String, String> extraTags) {
    if (flatName == null)
        throw new IllegalArgumentException("The passed flat name was null");
    final SplitFlatName sfn = OTMetric.splitFlatName(flatName);
    sfn.addTags(extraTags);
    final String fprefix = pref(nprefix);
    final String fext = suff(extension);
    final boolean isext = !"".equals(fext);
    final byte[] metricName = (fprefix + sfn.getMetricName() + fext).getBytes(UTF8);
    final Hasher hasherx = OTMETRIC_HASH.newHasher();
    PrimitiveSink hasher = new CapturingPrimitiveSink(hasherx);
    if (!"".equals(fprefix)) {
        hasher.putBytes(fprefix.getBytes(UTF8));
        //         hasher.putBytes(DOT);
    }
    hasher.putBytes(sfn.getMetricName().getBytes(UTF8));
    if (isext) {
        //         hasher.putBytes(DOT);
        hasher.putBytes(fext.getBytes(UTF8));
    }
    //hasher.putBytes(metricName);
    ByteBuffer buff = null;
    try {
        buff = ByteBuffer.allocateDirect((metricName.length + sfn.estimateSize()) * 3); // FIXME: Need a closer estimate
        buff.putLong(0) // the long hash code, Zero for now
                .putInt(0) // the java hash code, Zero for now
                .putLong(0) // the last trace time, Zero
                .put(sfn.hasAppTag() ? ONE_BYTE : ZERO_BYTE) // App Tag
                .put(sfn.hasHostTag() ? ONE_BYTE : ZERO_BYTE) // Host Tag
                .put(isext ? ONE_BYTE : ZERO_BYTE) // Ext flag
                .putLong(0L) // Parent long hash code
                .put(ZERO_BYTE) // CHMetric type mask
                .putInt(0) // The measurement mask
                .putInt(0) // SubMetric type flag
                .putInt(0) // Total Length, Zero for now
                .putInt(metricName.length) // Length of the prefix
                .putInt(sfn.getTags().size()) // Tag count
                .put(metricName); // The metric name bytes

        // IS_EXT_TAG || PARENT_TAG(8), CHMETRIC_TAG(1),  MEASUREMENT_TAG(4),  SUB_METRIC_TAG(4)      

        int totalLength = metricName.length;
        if (!sfn.getTags().isEmpty()) {
            for (Map.Entry<String, String> entry : sfn.getTags().entrySet()) {
                final byte[] key = entry.getKey().getBytes(UTF8);
                final byte[] value = entry.getValue().getBytes(UTF8);
                int tagLength = key.length + value.length + TAG_OVERHEAD;
                hasher.putBytes(key);
                hasher.putBytes(value);
                buff.putInt(tagLength).put(QT).put(key).put(QT).put(COLON).put(QT).put(value).put(QT);
                totalLength += tagLength;
            }
        }

        final int pos = buff.position();
        final HashCode hashCode = hasherx.hash();
        buff.putLong(LONG_HASH_CODE, hashCode.padToLong());
        buff.putInt(HASH_CODE, hashCode.hashCode());
        buff.putInt(TOTAL_SIZE_OFFSET, totalLength);
        buff.limit(pos);
        buff.position(0);
        nameBuffer = ByteBuffer.allocateDirect(buff.limit()).put(buff); //.asReadOnlyBuffer();
    } finally {
        OffHeapFIFOFile.clean(buff);
    }
}