diff --git a/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/CRLFGeneratorStream.java b/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/CRLFGeneratorStream.java index 9743f6f9..4cab8be3 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/CRLFGeneratorStream.java +++ b/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/CRLFGeneratorStream.java @@ -46,4 +46,10 @@ public class CRLFGeneratorStream extends OutputStream { } crlfOut.close(); } + + @Override + public void flush() throws IOException { + super.flush(); + crlfOut.flush(); + } } diff --git a/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java b/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java index 3b737702..0cba8093 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java +++ b/pgpainless-core/src/main/java/org/pgpainless/encryption_signing/EncryptionStream.java @@ -4,6 +4,7 @@ package org.pgpainless.encryption_signing; +import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; @@ -182,7 +183,11 @@ public final class EncryptionStream extends OutputStream { } public void prepareInputEncoding() { - CRLFGeneratorStream crlfGeneratorStream = new CRLFGeneratorStream(outermostStream, + // By buffering here, we drastically improve performance + // Reason is that CRLFGeneratorStream only implements write(int), so we need BufferedOutputStream to + // "convert" to write(buf) calls again + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outermostStream); + CRLFGeneratorStream crlfGeneratorStream = new CRLFGeneratorStream(bufferedOutputStream, options.isApplyCRLFEncoding() ? StreamEncoding.UTF8 : StreamEncoding.BINARY); outermostStream = crlfGeneratorStream; }