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