Github user xuchuanyin commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2732#discussion_r218644727
--- Diff: core/src/main/java/net/jpountz/lz4/LZ4DecompressorWithLength.java
---
@@ -0,0 +1,191 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// code ported from https://github.com/lz4/lz4-java/issues/119
+// remove this class when new version > 1.4.1 released
+// this is only for test
+
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.jpountz.lz4;
+
+import java.nio.ByteBuffer;
+
+// code ported from https://github.com/lz4/lz4-java/issues/119
+// remove this when new version > 1.4.1 released
+
+/**
+ * Convenience class to decompress data compressed by {@link
LZ4CompressorWithLength}.
+ * This decompressor is NOT compatible with any other compressors in
lz4-java
+ * or any other lz4 tools.
+ * The user does not need to specify the length of the compressed data or
+ * original data because the length of the original decompressed data is
+ * included in the compressed data.
+ */
+
+public class LZ4DecompressorWithLength {
+
+ private final LZ4FastDecompressor decompressor;
+
+ /**
+ * Returns the decompressed length of compressed data in
<code>src</code>.
+ *
+ * @param src the compressed data
+ * @return the decompressed length
+ */
+ public static int getDecompressedLength(byte[] src) {
+ return getDecompressedLength(src, 0);
+ }
+
+ /**
+ * Returns the decompressed length of compressed data in
<code>src[srcOff:]</code>.
+ *
+ * @param src the compressed data
+ * @param srcOff the start offset in src
+ * @return the decompressed length
+ */
+ public static int getDecompressedLength(byte[] src, int srcOff) {
+ return (src[srcOff] & 0xFF) | (src[srcOff + 1] & 0xFF) << 8 |
+ (src[srcOff + 2] & 0xFF) << 16 | src[srcOff + 3] << 24;
+ }
+
+ /**
+ * Returns the decompressed length of compressed data in
<code>src</code>.
+ *
+ * @param src the compressed data
+ * @return the decompressed length
+ */
+ public static int getDecompressedLength(ByteBuffer src) {
+ return getDecompressedLength(src, src.position());
+ }
+
+ /**
+ * Returns the decompressed length of compressed data in
<code>src[srcOff:]</code>.
+ *
+ * @param src the compressed data
+ * @param srcOff the start offset in src
+ * @return the decompressed length
+ */
+ public static int getDecompressedLength(ByteBuffer src, int srcOff) {
+ return (src.get(srcOff) & 0xFF) | (src.get(srcOff + 1) & 0xFF) << 8 |
+ (src.get(srcOff + 2) & 0xFF) << 16 | src.get(srcOff + 3) << 24;
+ }
+
+ /**
+ * Creates a new decompressor to decompress data compressed by {@link
LZ4CompressorWithLength}.
+ *
+ * @param decompressor decompressor to use
+ */
+ public LZ4DecompressorWithLength(LZ4FastDecompressor decompressor) {
+ this.decompressor = decompressor;
+ }
+
+ /**
+ * Convenience method, equivalent to calling
+ * {@link #decompress(byte[], int, byte[], int) decompress(src, 0, dest,
0)}.
+ *
+ * @param src the compressed data
+ * @param dest the destination buffer to store the decompressed data
+ * @return the number of bytes read to restore the original input
+ */
+ public int decompress(byte[] src, byte[] dest) {
--- End diff --
As we talked offline, the return value may not be the uncompressed size, we
need to handle it.
---