diff --git a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java index 36c3d8261..be83a2851 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/Decoder.java @@ -171,9 +171,8 @@ public static Decoder getDecoderByType(TSEncoding encoding, TSDataType dataType) case TIMESTAMP: return new LongRLBEDecoder(); case FLOAT: - return new FloatRLBEDecoder(); case DOUBLE: - return new DoubleRLBEDecoder(); + return new FloatDecoder(TSEncoding.valueOf(encoding.toString()), dataType); default: throw new TsFileDecodingException(String.format(ERROR_MSG, encoding, dataType)); } diff --git a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java index 505b8e69c..5682e5ec0 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/encoding/decoder/FloatDecoder.java @@ -71,6 +71,17 @@ public FloatDecoder(TSEncoding encodingType, TSDataType dataType) { throw new TsFileDecodingException( String.format("data type %s is not supported by FloatDecoder", dataType)); } + } else if (encodingType == TSEncoding.RLBE) { + if (dataType == TSDataType.FLOAT) { + decoder = new IntRLBEDecoder(); + logger.debug("tsfile-encoding FloatDecoder: init decoder using int-rlbe and float"); + } else if (dataType == TSDataType.DOUBLE) { + decoder = new LongRLBEDecoder(); + logger.debug("tsfile-encoding FloatDecoder: init decoder using long-rlbe and double"); + } else { + throw new TsFileDecodingException( + String.format("data type %s is not supported by FloatDecoder", dataType)); + } } else { throw new TsFileDecodingException( String.format("%s encoding is not supported by FloatDecoder", encodingType)); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java index 4655d3d62..4a79e3e68 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/FloatEncoder.java @@ -72,6 +72,15 @@ public FloatEncoder(TSEncoding encodingType, TSDataType dataType, int maxPointNu throw new TsFileEncodingException( String.format("data type %s is not supported by FloatEncoder", dataType)); } + } else if (encodingType == TSEncoding.RLBE) { + if (dataType == TSDataType.FLOAT) { + encoder = new IntRLBE(); + } else if (dataType == TSDataType.DOUBLE) { + encoder = new LongRLBE(); + } else { + throw new TsFileEncodingException( + String.format("data type %s is not supported by FloatEncoder", dataType)); + } } else { throw new TsFileEncodingException( String.format("%s encoding is not supported by FloatEncoder", encodingType)); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java index 232ddd3c1..188894386 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/encoding/encoder/TSEncodingBuilder.java @@ -341,6 +341,9 @@ public void initFromProps(Map props) { } public static class RLBE extends TSEncodingBuilder { + + private int maxPointNumber = 0; + @Override public Encoder getEncoder(TSDataType type) { switch (type) { @@ -351,9 +354,8 @@ public Encoder getEncoder(TSDataType type) { case TIMESTAMP: return new LongRLBE(); case FLOAT: - return new FloatRLBE(); case DOUBLE: - return new DoubleRLBE(); + return new FloatEncoder(TSEncoding.RLBE, type, maxPointNumber); default: throw new UnSupportedDataTypeException("RLBE doesn't support data type: " + type); }