diff --git a/pom.xml b/pom.xml
index 404c924..f1b13e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,5 +88,12 @@
xz
1.6
+
+
+
+ net.jpountz.lz4
+ lz4
+ 1.3.0
+
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/AbstractAlgorithm.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/AbstractAlgorithm.java
index fb8248d..fb42aab 100644
--- a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/AbstractAlgorithm.java
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/AbstractAlgorithm.java
@@ -10,11 +10,11 @@ import java.io.*;
public abstract class AbstractAlgorithm {
public abstract String getName();
- public final byte[] compress(byte[] input){
+ public byte[] compress(byte[] input){
try {
ByteArrayInputStream bais = new ByteArrayInputStream(input);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- compress0(bais, baos);
+ compress(bais, baos);
return baos.toByteArray();
} catch (IOException e){
SneakyThrow.throwException(e);
@@ -22,11 +22,11 @@ public abstract class AbstractAlgorithm {
return new byte[0]; // Never reaches here anyway
}
- public final byte[] decompress(byte[] input){
+ public byte[] decompress(byte[] input){
try {
ByteArrayInputStream bais = new ByteArrayInputStream(input);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- decompress0(bais, baos);
+ decompress(bais, baos);
return baos.toByteArray();
} catch (IOException e){
SneakyThrow.throwException(e);
@@ -34,22 +34,27 @@ public abstract class AbstractAlgorithm {
return new byte[0]; // Never reaches here anyway
}
- public void compress0(InputStream inputStream, OutputStream outputStream) throws IOException {
- try(OutputStream out = compress(outputStream)) {
+ public void compress(InputStream inputStream, OutputStream outputStream) throws IOException {
+ try(OutputStream out = createCompressor(outputStream)) {
byte[] buf = new byte[8192];
int s; while ((s = inputStream.read(buf)) != -1) out.write(buf, 0, s);
out.flush();
}
}
- public void decompress0(InputStream inputStream, OutputStream outputStream) throws IOException {
- try(InputStream is = decompress(inputStream)) {
+ public void decompress(InputStream inputStream, OutputStream outputStream) throws IOException {
+ try(InputStream is = createDecompressor(inputStream)) {
byte[] buf = new byte[8192];
int s; while ((s = is.read(buf)) != -1) outputStream.write(buf, 0, s);
outputStream.flush();
}
}
- public abstract OutputStream compress(OutputStream outputStream) throws IOException;
- public abstract InputStream decompress(InputStream inputStream) throws IOException;
+ public OutputStream createCompressor(OutputStream outputStream) throws IOException {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ public InputStream createDecompressor(InputStream inputStream) throws IOException {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
}
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/GZip.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/GZip.java
index 6187514..a891db1 100644
--- a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/GZip.java
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/GZip.java
@@ -15,12 +15,12 @@ public class GZip extends AbstractAlgorithm {
@Getter private final String name = "GZip";
@Override
- public OutputStream compress(OutputStream outputStream) throws IOException {
+ public OutputStream createCompressor(OutputStream outputStream) throws IOException {
return new GZIPOutputStream(outputStream);
}
@Override
- public InputStream decompress(InputStream inputStream) throws IOException {
+ public InputStream createDecompressor(InputStream inputStream) throws IOException {
return new GZIPInputStream(inputStream);
}
}
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/LZ4.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/LZ4.java
new file mode 100644
index 0000000..7020f4d
--- /dev/null
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/LZ4.java
@@ -0,0 +1,26 @@
+package eu.mikroskeem.uurimustoo.algoritmidetest.algoritmid;
+
+import lombok.Getter;
+import net.jpountz.lz4.LZ4Compressor;
+import net.jpountz.lz4.LZ4Factory;
+import net.jpountz.lz4.LZ4SafeDecompressor;
+
+/**
+ * @author Mark Vainomaa
+ */
+public class LZ4 extends AbstractAlgorithm {
+ @Getter private final String name = "LZ4";
+ private final LZ4Factory factory = LZ4Factory.fastestInstance();
+
+ @Override
+ public byte[] compress(byte[] input) {
+ LZ4Compressor compressor = factory.fastCompressor();
+ return compressor.compress(input);
+ }
+
+ @Override
+ public byte[] decompress(byte[] input) {
+ LZ4SafeDecompressor decompressor = factory.safeDecompressor();
+ return decompressor.decompress(input, 8192);
+ }
+}
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/XZ.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/XZ.java
index e37a8c7..c66138d 100644
--- a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/XZ.java
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/XZ.java
@@ -16,13 +16,13 @@ public class XZ extends AbstractAlgorithm {
@Getter private final String name = "XZ";
@Override
- public OutputStream compress(OutputStream outputStream) throws IOException {
+ public OutputStream createCompressor(OutputStream outputStream) throws IOException {
LZMA2Options options = new LZMA2Options();
return new XZOutputStream(outputStream, options);
}
@Override
- public InputStream decompress(InputStream inputStream) throws IOException {
+ public InputStream createDecompressor(InputStream inputStream) throws IOException {
return new XZInputStream(inputStream);
}
}
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/Zip.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/Zip.java
index 11ada5d..5951f21 100644
--- a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/Zip.java
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/Zip.java
@@ -16,7 +16,7 @@ public class Zip extends AbstractAlgorithm {
@Getter private final String name = "ZIP";
@Override
- public void compress0(InputStream inputStream, OutputStream outputStream) throws IOException {
+ public void compress(InputStream inputStream, OutputStream outputStream) throws IOException {
try(ZipOutputStream out = new ZipOutputStream(outputStream)){
ZipEntry ze = new ZipEntry("Test.class");
out.putNextEntry(ze);
@@ -31,7 +31,7 @@ public class Zip extends AbstractAlgorithm {
}
@Override
- public void decompress0(InputStream inputStream, OutputStream outputStream) throws IOException {
+ public void decompress(InputStream inputStream, OutputStream outputStream) throws IOException {
try(ZipInputStream in = new ZipInputStream(inputStream)){
ZipEntry ze = in.getNextEntry();
assert ze.getName().equals("Test.class");
@@ -43,14 +43,4 @@ public class Zip extends AbstractAlgorithm {
outputStream.flush();
}
}
-
- @Override
- public OutputStream compress(OutputStream outputStream) throws IOException {
- throw new UnsupportedOperationException("See void compress0()");
- }
-
- @Override
- public InputStream decompress(InputStream inputStream) throws IOException {
- throw new UnsupportedOperationException("See void decompress0()");
- }
}