org.mapdb.serializer.SerializerByteArray Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mapdb Show documentation
Show all versions of mapdb Show documentation
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap memory. It is a fast, scalable and easy to use embedded Java database.
package org.mapdb.serializer;
import net.jpountz.xxhash.XXHash32;
import org.mapdb.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
/**
* Created by jan on 2/28/16.
*/
public class SerializerByteArray implements GroupSerializer {
private static final XXHash32 HASHER = CC.HASH_FACTORY.hash32();
@Override
public void serialize(DataOutput2 out, byte[] value) throws IOException {
out.packInt(value.length);
out.write(value);
}
@Override
public byte[] deserialize(DataInput2 in, int available) throws IOException {
int size = in.unpackInt();
byte[] ret = new byte[size];
in.readFully(ret);
return ret;
}
@Override
public boolean isTrusted() {
return true;
}
@Override
public boolean equals(byte[] a1, byte[] a2) {
return Arrays.equals(a1, a2);
}
public int hashCode(byte[] bytes, int seed) {
return HASHER.hash(bytes, 0, bytes.length, seed);
}
@Override
public int compare(byte[] o1, byte[] o2) {
if (o1 == o2) return 0;
final int len = Math.min(o1.length, o2.length);
for (int i = 0; i < len; i++) {
int b1 = o1[i] & 0xFF;
int b2 = o2[i] & 0xFF;
if (b1 != b2)
return b1 - b2;
}
return o1.length - o2.length;
}
@Override
public int valueArraySearch(Object keys, byte[] key) {
return Arrays.binarySearch((byte[][])keys, key, Serializer.BYTE_ARRAY);
}
@Override
public int valueArraySearch(Object keys, byte[] key, Comparator comparator) {
//TODO PERF optimize search
Object[] v = valueArrayToArray(keys);
return Arrays.binarySearch(v, key, comparator);
}
@Override
public void valueArraySerialize(DataOutput2 out, Object vals) throws IOException {
byte[][] vals2 = (byte[][]) vals;
out.packInt(vals2.length);
for(byte[]b:vals2){
Serializer.BYTE_ARRAY.serialize(out, b);
}
}
@Override
public byte[][] valueArrayDeserialize(DataInput2 in, int size) throws IOException {
int s = in.unpackInt();
byte[][] ret = new byte[s][];
for(int i=0;i