package com.rubiconproject.oss.kv.transcoder; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; /** * Encoder/decoder for long objects. Copied from Tokyo Tyrant: * * http://bitbucket.org/EP/tokyotyrant-java/src/tip/src/main/java/tokyotyrant/transcoder/LongTranscoder.java * * @author samtingleff * */ public class LongTranscoder implements Transcoder { private final ByteOrder byteOrder; public LongTranscoder() { this(ByteOrder.nativeOrder()); } public LongTranscoder(ByteOrder byteOrder) { this.byteOrder = byteOrder; } public byte[] encode(Object decoded) { return ByteBuffer.allocate(Long.SIZE / 8).order(byteOrder).putLong( (Long) decoded).array(); } public Object decode(byte[] encoded) { if (encoded.length != Long.SIZE / 8) { throw new IllegalArgumentException("Unable to decode " + Arrays.toString(encoded)); } return ByteBuffer.wrap(encoded).order(byteOrder).getLong(); } }