diff --git a/pom.xml b/pom.xml
index f1b13e7..9019dd8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,13 @@
+
+
+ org.apache.commons
+ commons-compress
+ 1.13
+
+
org.tukaani
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 fb42aab..e7fbc48 100644
--- a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/AbstractAlgorithm.java
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/AbstractAlgorithm.java
@@ -38,7 +38,10 @@ public abstract class AbstractAlgorithm {
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();
+ try {
+ outputStream.flush();
+ }
+ catch (Throwable ignored) {} // Some compressors may not support flushing, like LZMA
}
}
@@ -46,7 +49,10 @@ public abstract class AbstractAlgorithm {
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();
+ try {
+ outputStream.flush();
+ }
+ catch (Throwable ignored) {} // Some compressors may not support flushing, like LZMA
}
}
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/BZip2.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/BZip2.java
new file mode 100644
index 0000000..abccce3
--- /dev/null
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/BZip2.java
@@ -0,0 +1,26 @@
+package eu.mikroskeem.uurimustoo.algoritmidetest.algoritmid;
+
+import lombok.Getter;
+import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @author Mark Vainomaa
+ */
+public class BZip2 extends AbstractAlgorithm {
+ @Getter private final String name = "BZip2";
+
+ @Override
+ public OutputStream createCompressor(OutputStream outputStream) throws IOException {
+ return new BZip2CompressorOutputStream(outputStream);
+ }
+
+ @Override
+ public InputStream createDecompressor(InputStream inputStream) throws IOException {
+ return new BZip2CompressorInputStream(inputStream);
+ }
+}
diff --git a/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/LZMA.java b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/LZMA.java
new file mode 100644
index 0000000..2f23695
--- /dev/null
+++ b/src/main/java/eu/mikroskeem/uurimustoo/algoritmidetest/algoritmid/LZMA.java
@@ -0,0 +1,26 @@
+package eu.mikroskeem.uurimustoo.algoritmidetest.algoritmid;
+
+import lombok.Getter;
+import org.apache.commons.compress.compressors.lzma.LZMACompressorInputStream;
+import org.apache.commons.compress.compressors.lzma.LZMACompressorOutputStream;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @author Mark Vainomaa
+ */
+public class LZMA extends AbstractAlgorithm {
+ @Getter private final String name = "LZMA";
+
+ @Override
+ public OutputStream createCompressor(OutputStream outputStream) throws IOException {
+ return new LZMACompressorOutputStream(outputStream);
+ }
+
+ @Override
+ public InputStream createDecompressor(InputStream inputStream) throws IOException {
+ return new LZMACompressorInputStream(inputStream);
+ }
+}