You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/05/27 06:12:37 UTC
[iotdb] 01/01: Improve Plain Encode
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch PlainEncodeImprove
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 707c4dff009228ef7d1e04f7cbb62112fd5d31a5
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Fri May 27 14:12:20 2022 +0800
Improve Plain Encode
---
.../tsfile/encoding/encoder/PlainEncoder.java | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/PlainEncoder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/PlainEncoder.java
index 1a2271836b..694dad8baf 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/PlainEncoder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/PlainEncoder.java
@@ -36,8 +36,9 @@ import java.math.BigDecimal;
public class PlainEncoder extends Encoder {
private static final Logger logger = LoggerFactory.getLogger(PlainEncoder.class);
- private TSDataType dataType;
- private int maxStringLength;
+ private final TSDataType dataType;
+ private final int maxStringLength;
+ private final byte[] writeBufferForLong = new byte[8];
public PlainEncoder(TSDataType dataType, int maxStringLength) {
super(TSEncoding.PLAIN);
@@ -67,9 +68,20 @@ public class PlainEncoder extends Encoder {
@Override
public void encode(long value, ByteArrayOutputStream out) {
- for (int i = 7; i >= 0; i--) {
- out.write((byte) (((value) >> (i * 8)) & 0xFF));
- }
+ final int first = (int) (value);
+ final int second = (int) ((value >>> 32));
+ // Implementation taken from Apache Avro (org.apache.avro.io.BinaryData)
+ // the compiler seems to execute this order the best, likely due to
+ // register allocation -- the lifetime of constants is minimized.
+ writeBufferForLong[0] = (byte) (first);
+ writeBufferForLong[4] = (byte) (second);
+ writeBufferForLong[5] = (byte) (second >>> 8);
+ writeBufferForLong[1] = (byte) (first >>> 8);
+ writeBufferForLong[2] = (byte) (first >>> 16);
+ writeBufferForLong[6] = (byte) (second >>> 16);
+ writeBufferForLong[7] = (byte) (second >>> 24);
+ writeBufferForLong[3] = (byte) (first >>> 24);
+ out.write(writeBufferForLong, 0, 8);
}
@Override