From 556053e5b748c9424919e35640f7d17441b0b167 Mon Sep 17 00:00:00 2001 From: Deshan Xiao Date: Thu, 28 Dec 2023 18:58:27 +0800 Subject: [PATCH] fix-format --- .../java/org/apache/orc/impl/BrotliCodec.java | 318 +++++++++--------- .../test/org/apache/orc/impl/TestBrotli.java | 244 +++++++------- 2 files changed, 281 insertions(+), 281 deletions(-) diff --git a/java/core/src/java/org/apache/orc/impl/BrotliCodec.java b/java/core/src/java/org/apache/orc/impl/BrotliCodec.java index b754e3128c..d2a17b2358 100644 --- a/java/core/src/java/org/apache/orc/impl/BrotliCodec.java +++ b/java/core/src/java/org/apache/orc/impl/BrotliCodec.java @@ -19,7 +19,6 @@ package org.apache.orc.impl; import com.aayushatharva.brotli4j.Brotli4jLoader; -import com.aayushatharva.brotli4j.decoder.Decoder; import com.aayushatharva.brotli4j.decoder.DecoderJNI; import com.aayushatharva.brotli4j.encoder.Encoder; import org.apache.orc.CompressionCodec; @@ -29,187 +28,188 @@ import java.nio.ByteBuffer; public class BrotliCodec implements CompressionCodec, DirectDecompressionCodec { - // load jni library. - static { - Brotli4jLoader.ensureAvailability(); - } - - public BrotliCodec() { - } - - static class BrotliOptions implements Options { - - private Encoder.Mode mode = Encoder.Mode.GENERIC; - private int quality = -1; - private int lgwin = -1; + // load jni library. + static { + Brotli4jLoader.ensureAvailability(); + } - public BrotliOptions() { + public BrotliCodec() { + } - } + static class BrotliOptions implements Options { - public BrotliOptions(int quality, int lgwin, Encoder.Mode mode) { - this.quality = quality; - this.lgwin = lgwin; - this.mode = mode; - } + private Encoder.Mode mode = Encoder.Mode.GENERIC; + private int quality = -1; + private int lgwin = -1; - @Override - public Options copy() { - return new BrotliOptions(quality, lgwin, mode); - } + BrotliOptions() { - @Override - public Options setSpeed(SpeedModifier newValue) { - switch (newValue) { - case FAST: - // best speed + 1. - quality = 1; - break; - case DEFAULT: - // best quality. Keep default with default value. - quality = -1; - break; - case FASTEST: - // best speed. - quality = 0; - break; - default: - break; - } - return this; - } - - @Override - public Options setData(DataKind newValue) { - switch (newValue) { - case BINARY: - mode = Encoder.Mode.GENERIC; - break; - case TEXT: - mode = Encoder.Mode.TEXT; - break; - default: - break; - } - return this; - } - - public Encoder.Parameters brotli4jParameter() { - return new Encoder.Parameters() - .setQuality(quality).setWindow(lgwin).setMode(mode); - } } - private static final BrotliCodec.BrotliOptions DEFAULT_OPTIONS = new BrotliOptions(); + BrotliOptions(int quality, int lgwin, Encoder.Mode mode) { + this.quality = quality; + this.lgwin = lgwin; + this.mode = mode; + } @Override - public Options getDefaultOptions() { - return DEFAULT_OPTIONS; + public Options copy() { + return new BrotliOptions(quality, lgwin, mode); } @Override - public boolean compress( - ByteBuffer in, - ByteBuffer out, - ByteBuffer overflow, - Options options) throws IOException { - BrotliOptions brotliOptions = (BrotliOptions) options; - int inBytes = in.remaining(); - // TODO Make EncoderJNI and EncoderJNI.Wrapper public and then we can avoid data copy. See:https://github.com/hyperxpro/Brotli4j/issues/123 - byte[] compressed = null; - if (in.arrayOffset() + in.position() == 0) { - compressed = Encoder.compress(in.array(), in.arrayOffset() + in.position(), inBytes, brotliOptions.brotli4jParameter()); - } else { - byte[] input = new byte[in.remaining()]; - ByteBuffer slice = in.slice(); - slice.get(0, input); - compressed = Encoder.compress(input, 0, inBytes, brotliOptions.brotli4jParameter()); - } - int outBytes = compressed.length; - if (outBytes < inBytes) { - int remaining = out.remaining(); - if (remaining >= outBytes) { - System.arraycopy(compressed, 0, out.array(), out.arrayOffset() + - out.position(), outBytes); - out.position(out.position() + outBytes); - } else { - System.arraycopy(compressed, 0, out.array(), out.arrayOffset() + - out.position(), remaining); - out.position(out.limit()); - System.arraycopy(compressed, remaining, overflow.array(), - overflow.arrayOffset(), outBytes - remaining); - overflow.position(outBytes - remaining); - } - return true; - } else { - return false; - } + public Options setSpeed(SpeedModifier newValue) { + switch (newValue) { + case FAST: + // best speed + 1. + quality = 1; + break; + case DEFAULT: + // best quality. Keep default with default value. + quality = -1; + break; + case FASTEST: + // best speed. + quality = 0; + break; + default: + break; + } + return this; } @Override - public void decompress(ByteBuffer in, ByteBuffer out) throws IOException { - int compressedBytes = in.remaining(); - DecoderJNI.Wrapper decoder = new DecoderJNI.Wrapper(compressedBytes); - try { - decoder.getInputBuffer().put(in); - decoder.push(compressedBytes); - while (decoder.getStatus() != DecoderJNI.Status.DONE) { - switch (decoder.getStatus()) { - case OK: - decoder.push(0); - break; - - case NEEDS_MORE_OUTPUT: - ByteBuffer buffer = decoder.pull(); - out.put(buffer); - break; - - case NEEDS_MORE_INPUT: - // Give decoder a chance to process the remaining of the buffered byte. - decoder.push(0); - // If decoder still needs input, this means that stream is truncated. - if (decoder.getStatus() == DecoderJNI.Status.NEEDS_MORE_INPUT) { - return; - } - break; - - default: - return; - } - } - } finally { - out.flip(); - decoder.destroy(); - } + public Options setData(DataKind newValue) { + switch (newValue) { + case BINARY: + mode = Encoder.Mode.GENERIC; + break; + case TEXT: + mode = Encoder.Mode.TEXT; + break; + default: + break; + } + return this; } - @Override - public boolean isAvailable() { - return true; + public Encoder.Parameters brotli4jParameter() { + return new Encoder.Parameters() + .setQuality(quality).setWindow(lgwin).setMode(mode); + } + } + + private static final BrotliCodec.BrotliOptions DEFAULT_OPTIONS = new BrotliOptions(); + + @Override + public Options getDefaultOptions() { + return DEFAULT_OPTIONS; + } + + @Override + public boolean compress( + ByteBuffer in, + ByteBuffer out, + ByteBuffer overflow, + Options options) throws IOException { + BrotliOptions brotliOptions = (BrotliOptions) options; + int inBytes = in.remaining(); + // TODO Make EncoderJNI and EncoderJNI.Wrapper public and then we can avoid data copy. See:https://github.com/hyperxpro/Brotli4j/issues/123 + byte[] compressed = null; + if (in.arrayOffset() + in.position() == 0) { + compressed = Encoder.compress( + in.array(), in.arrayOffset() + in.position(), inBytes, brotliOptions.brotli4jParameter()); + } else { + byte[] input = new byte[in.remaining()]; + ByteBuffer slice = in.slice(); + slice.get(0, input); + compressed = Encoder.compress(input, 0, inBytes, brotliOptions.brotli4jParameter()); + } + int outBytes = compressed.length; + if (outBytes < inBytes) { + int remaining = out.remaining(); + if (remaining >= outBytes) { + System.arraycopy(compressed, 0, out.array(), out.arrayOffset() + + out.position(), outBytes); + out.position(out.position() + outBytes); + } else { + System.arraycopy(compressed, 0, out.array(), out.arrayOffset() + + out.position(), remaining); + out.position(out.limit()); + System.arraycopy(compressed, remaining, overflow.array(), + overflow.arrayOffset(), outBytes - remaining); + overflow.position(outBytes - remaining); + } + return true; + } else { + return false; } + } + + @Override + public void decompress(ByteBuffer in, ByteBuffer out) throws IOException { + int compressedBytes = in.remaining(); + DecoderJNI.Wrapper decoder = new DecoderJNI.Wrapper(compressedBytes); + try { + decoder.getInputBuffer().put(in); + decoder.push(compressedBytes); + while (decoder.getStatus() != DecoderJNI.Status.DONE) { + switch (decoder.getStatus()) { + case OK: + decoder.push(0); + break; + + case NEEDS_MORE_OUTPUT: + ByteBuffer buffer = decoder.pull(); + out.put(buffer); + break; + + case NEEDS_MORE_INPUT: + // Give decoder a chance to process the remaining of the buffered byte. + decoder.push(0); + // If decoder still needs input, this means that stream is truncated. + if (decoder.getStatus() == DecoderJNI.Status.NEEDS_MORE_INPUT) { + return; + } + break; - @Override - public CompressionKind getKind() { - return CompressionKind.BROTLI; + default: + return; + } + } + } finally { + out.flip(); + decoder.destroy(); } + } + @Override + public boolean isAvailable() { + return true; + } - @Override - public void directDecompress(ByteBuffer in, ByteBuffer out) throws IOException { - decompress(in, out); - } + @Override + public CompressionKind getKind() { + return CompressionKind.BROTLI; + } - @Override - public void reset() { - } + @Override + public void directDecompress(ByteBuffer in, ByteBuffer out) throws IOException { + decompress(in, out); + } - @Override - public void destroy() { - } + @Override + public void reset() { - @Override - public void close() { - OrcCodecPool.returnCodec(CompressionKind.BROTLI, this); - } -} \ No newline at end of file + } + + @Override + public void destroy() { + } + + @Override + public void close() { + OrcCodecPool.returnCodec(CompressionKind.BROTLI, this); + } +} diff --git a/java/core/src/test/org/apache/orc/impl/TestBrotli.java b/java/core/src/test/org/apache/orc/impl/TestBrotli.java index 82b79065fd..d7bc3c601a 100644 --- a/java/core/src/test/org/apache/orc/impl/TestBrotli.java +++ b/java/core/src/test/org/apache/orc/impl/TestBrotli.java @@ -25,131 +25,131 @@ import static org.junit.jupiter.api.Assertions.*; public class TestBrotli { - @Test - public void testOutputLargerThanBefore() { - ByteBuffer in = ByteBuffer.allocate(10); - ByteBuffer out = ByteBuffer.allocate(10); - in.put(new byte[]{1,2,3,4,5,6,7,10}); - in.flip(); - try (BrotliCodec brotliCodec = new BrotliCodec()) { - // The compressed data length is larger than the original data. - assertFalse(brotliCodec.compress(in, out, null, - brotliCodec.getDefaultOptions())); - } catch (Exception e) { - fail(e); - } + @Test + public void testOutputLargerThanBefore() { + ByteBuffer in = ByteBuffer.allocate(10); + ByteBuffer out = ByteBuffer.allocate(10); + in.put(new byte[]{1, 2, 3, 4, 5, 6, 7, 10}); + in.flip(); + try (BrotliCodec brotliCodec = new BrotliCodec()) { + // The compressed data length is larger than the original data. + assertFalse(brotliCodec.compress(in, out, null, + brotliCodec.getDefaultOptions())); + } catch (Exception e) { + fail(e); } - - @Test - public void testCompress() { - ByteBuffer in = ByteBuffer.allocate(10000); - ByteBuffer out = ByteBuffer.allocate(500); - ByteBuffer result = ByteBuffer.allocate(10000); - for (int i = 0; i < 10000; i++) { - in.put((byte)i); - } - in.flip(); - try (BrotliCodec brotliCodec = new BrotliCodec()) { - assertTrue(brotliCodec.compress(in, out, null, - brotliCodec.getDefaultOptions())); - out.flip(); - brotliCodec.decompress(out, result); - assertArrayEquals(result.array(), in.array()); - } catch (Exception e) { - fail(e); - } + } + + @Test + public void testCompress() { + ByteBuffer in = ByteBuffer.allocate(10000); + ByteBuffer out = ByteBuffer.allocate(500); + ByteBuffer result = ByteBuffer.allocate(10000); + for (int i = 0; i < 10000; i++) { + in.put((byte) i); } - - @Test - public void testCompressNotFromStart() { - ByteBuffer in = ByteBuffer.allocate(10000); - ByteBuffer out = ByteBuffer.allocate(10000); - ByteBuffer result = ByteBuffer.allocate(10000); - for (int i = 0; i < 10000; i++) { - in.put((byte)i); - } - in.flip(); - in.get(); - - ByteBuffer slice = in.slice(); - byte[] originalBytes = new byte[slice.remaining()]; - slice.get(originalBytes); - - try (BrotliCodec brotliCodec = new BrotliCodec()) { - // The compressed data length is larger than the original data. - assertTrue(brotliCodec.compress(in, out, null, - brotliCodec.getDefaultOptions())); - - out.flip(); - brotliCodec.decompress(out, result); - - byte[] resultArray = new byte[result.remaining()]; - result.get(resultArray); - assertArrayEquals(resultArray, originalBytes); - } catch (Exception e) { - fail(e); - } + in.flip(); + try (BrotliCodec brotliCodec = new BrotliCodec()) { + assertTrue(brotliCodec.compress(in, out, null, + brotliCodec.getDefaultOptions())); + out.flip(); + brotliCodec.decompress(out, result); + assertArrayEquals(result.array(), in.array()); + } catch (Exception e) { + fail(e); } - - @Test - public void testCompressWithOverflow() { - ByteBuffer in = ByteBuffer.allocate(10000); - ByteBuffer out = ByteBuffer.allocate(1); - ByteBuffer overflow = ByteBuffer.allocate(10000); - ByteBuffer result = ByteBuffer.allocate(10000); - for (int i = 0; i < 10000; i++) { - in.put((byte)i); - } - in.flip(); - try (BrotliCodec brotliCodec = new BrotliCodec()) { - assertTrue(brotliCodec.compress(in, out, overflow, - brotliCodec.getDefaultOptions())); - out.flip(); - overflow.flip(); - - // copy out, overflow to compressed - byte[] compressed = new byte[out.remaining() + overflow.remaining()]; - System.arraycopy(out.array(), out.arrayOffset() + out.position(), compressed, 0, out.remaining()); - System.arraycopy(overflow.array(), overflow.arrayOffset() + overflow.position(), compressed, out.remaining(), overflow.remaining()); - // decompress compressedBuffer and check the result. - ByteBuffer compressedBuffer = ByteBuffer.allocate(compressed.length); - compressedBuffer.put(compressed); - compressedBuffer.flip(); - brotliCodec.decompress(compressedBuffer, result); - assertArrayEquals(result.array(), in.array()); - } catch (Exception e) { - fail(e); - } + } + + @Test + public void testCompressNotFromStart() { + ByteBuffer in = ByteBuffer.allocate(10000); + ByteBuffer out = ByteBuffer.allocate(10000); + ByteBuffer result = ByteBuffer.allocate(10000); + for (int i = 0; i < 10000; i++) { + in.put((byte) i); } - - @Test - public void testDirectDecompress() { - ByteBuffer in = ByteBuffer.allocate(10000); - ByteBuffer out = ByteBuffer.allocate(10000); - ByteBuffer directOut = ByteBuffer.allocateDirect(10000); - ByteBuffer directResult = ByteBuffer.allocateDirect(10000); - for (int i = 0; i < 10000; i++) { - in.put((byte)i); - } - in.flip(); - try (BrotliCodec brotliCodec = new BrotliCodec()) { - // write bytes to heap buffer. - assertTrue(brotliCodec.compress(in, out, null, - brotliCodec.getDefaultOptions())); - out.flip(); - // copy heap buffer to direct buffer. - directOut.put(out.array()); - directOut.flip(); - - brotliCodec.decompress(directOut, directResult); - - // copy result from direct buffer to heap. - byte[] heapBytes = new byte[in.array().length]; - directResult.get(heapBytes, 0, directResult.limit()); - - assertArrayEquals(in.array(), heapBytes); - } catch (Exception e) { - fail(e); - } + in.flip(); + in.get(); + + ByteBuffer slice = in.slice(); + byte[] originalBytes = new byte[slice.remaining()]; + slice.get(originalBytes); + + try (BrotliCodec brotliCodec = new BrotliCodec()) { + // The compressed data length is larger than the original data. + assertTrue(brotliCodec.compress(in, out, null, + brotliCodec.getDefaultOptions())); + + out.flip(); + brotliCodec.decompress(out, result); + + byte[] resultArray = new byte[result.remaining()]; + result.get(resultArray); + assertArrayEquals(resultArray, originalBytes); + } catch (Exception e) { + fail(e); + } + } + + @Test + public void testCompressWithOverflow() { + ByteBuffer in = ByteBuffer.allocate(10000); + ByteBuffer out = ByteBuffer.allocate(1); + ByteBuffer overflow = ByteBuffer.allocate(10000); + ByteBuffer result = ByteBuffer.allocate(10000); + for (int i = 0; i < 10000; i++) { + in.put((byte) i); + } + in.flip(); + try (BrotliCodec brotliCodec = new BrotliCodec()) { + assertTrue(brotliCodec.compress(in, out, overflow, + brotliCodec.getDefaultOptions())); + out.flip(); + overflow.flip(); + + // copy out, overflow to compressed + byte[] compressed = new byte[out.remaining() + overflow.remaining()]; + System.arraycopy(out.array(), out.arrayOffset() + out.position(), compressed, 0, out.remaining()); + System.arraycopy(overflow.array(), overflow.arrayOffset() + overflow.position(), compressed, out.remaining(), overflow.remaining()); + // decompress compressedBuffer and check the result. + ByteBuffer compressedBuffer = ByteBuffer.allocate(compressed.length); + compressedBuffer.put(compressed); + compressedBuffer.flip(); + brotliCodec.decompress(compressedBuffer, result); + assertArrayEquals(result.array(), in.array()); + } catch (Exception e) { + fail(e); + } + } + + @Test + public void testDirectDecompress() { + ByteBuffer in = ByteBuffer.allocate(10000); + ByteBuffer out = ByteBuffer.allocate(10000); + ByteBuffer directOut = ByteBuffer.allocateDirect(10000); + ByteBuffer directResult = ByteBuffer.allocateDirect(10000); + for (int i = 0; i < 10000; i++) { + in.put((byte) i); + } + in.flip(); + try (BrotliCodec brotliCodec = new BrotliCodec()) { + // write bytes to heap buffer. + assertTrue(brotliCodec.compress(in, out, null, + brotliCodec.getDefaultOptions())); + out.flip(); + // copy heap buffer to direct buffer. + directOut.put(out.array()); + directOut.flip(); + + brotliCodec.decompress(directOut, directResult); + + // copy result from direct buffer to heap. + byte[] heapBytes = new byte[in.array().length]; + directResult.get(heapBytes, 0, directResult.limit()); + + assertArrayEquals(in.array(), heapBytes); + } catch (Exception e) { + fail(e); } + } } \ No newline at end of file