public static PrimitiveValue getVal( final DirectBuffer buffer, final PrimitiveType type, final int length) { if (length == 0) { return null; } switch (type) { case CHAR: if (length == 1) { return new PrimitiveValue(CodecUtil.charGet(buffer, 0), 1); } else { final byte[] array = new byte[length]; CodecUtil.charsGet(buffer, 0, array, 0, array.length); return new PrimitiveValue(array, "UTF-8", array.length); } case INT8: return new PrimitiveValue(CodecUtil.int8Get(buffer, 0), 1); case INT16: return new PrimitiveValue(CodecUtil.int16Get(buffer, 0, ByteOrder.LITTLE_ENDIAN), 2); case INT32: return new PrimitiveValue(CodecUtil.int32Get(buffer, 0, ByteOrder.LITTLE_ENDIAN), 4); case INT64: return new PrimitiveValue(CodecUtil.int64Get(buffer, 0, ByteOrder.LITTLE_ENDIAN), 8); case UINT8: return new PrimitiveValue(CodecUtil.uint8Get(buffer, 0), 1); case UINT16: return new PrimitiveValue(CodecUtil.uint16Get(buffer, 0, ByteOrder.LITTLE_ENDIAN), 2); case UINT32: return new PrimitiveValue(CodecUtil.uint32Get(buffer, 0, ByteOrder.LITTLE_ENDIAN), 4); case UINT64: return new PrimitiveValue(CodecUtil.uint64Get(buffer, 0, ByteOrder.LITTLE_ENDIAN), 8); case FLOAT: return new PrimitiveValue(CodecUtil.floatGet(buffer, 0, ByteOrder.LITTLE_ENDIAN), 4); case DOUBLE: return new PrimitiveValue(CodecUtil.doubleGet(buffer, 0, ByteOrder.LITTLE_ENDIAN), 8); default: return null; } }