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