fixed performance bug

This commit is contained in:
Walter Oggioni
2020-05-01 00:45:04 +01:00
parent 7e08bd7505
commit 3c21a78e1a
4 changed files with 12 additions and 14 deletions

View File

@@ -3,8 +3,6 @@ package net.woggioni.jzstd
import com.beust.jcommander.JCommander import com.beust.jcommander.JCommander
import com.beust.jcommander.Parameter import com.beust.jcommander.Parameter
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.BufferedInputStream
import java.io.BufferedOutputStream
import java.io.InputStream import java.io.InputStream
import java.io.OutputStream import java.io.OutputStream
import java.nio.file.Files import java.nio.file.Files
@@ -32,7 +30,7 @@ object Cli {
var overwrite: Boolean = false, var overwrite: Boolean = false,
@Parameter(names = arrayOf("-l", "--level"), description = "Set compression level") @Parameter(names = arrayOf("-l", "--level"), description = "Set compression level")
var level: Int = 3, var level: Int = 0,
@Parameter(names = arrayOf("-i", "--input"), description = "Set input file, defaults to stdin otherwise") @Parameter(names = arrayOf("-i", "--input"), description = "Set input file, defaults to stdin otherwise")
var input: String? = null, var input: String? = null,
@@ -110,7 +108,7 @@ object Cli {
else it else it
} }
output.use { outputStream -> output.use { outputStream ->
val buffer = ByteArray(0x10000) val buffer = ByteArray(0x1000)
while (true) { while (true) {
val read = inputStream.read(buffer, 0, buffer.size) val read = inputStream.read(buffer, 0, buffer.size)
if (read < 0) break if (read < 0) break

View File

@@ -16,7 +16,7 @@ public class ZstdOutputStream extends OutputStream {
private static final int inputBufferSize = ZstdLibrary.CStreamInSize(); private static final int inputBufferSize = ZstdLibrary.CStreamInSize();
private static final int outputBufferSize = ZstdLibrary.CStreamOutSize(); private static final int outputBufferSize = ZstdLibrary.CStreamOutSize();
private final byte[] buffer = new byte[outputBufferSize];
private ZstdOutputStream(OutputStream sink, private ZstdOutputStream(OutputStream sink,
ZstdCompressionCtx ctx, ZstdCompressionCtx ctx,
@@ -37,7 +37,7 @@ public class ZstdOutputStream extends OutputStream {
} }
public static ZstdOutputStream from(OutputStream sink) { public static ZstdOutputStream from(OutputStream sink) {
return from(sink, 3); return from(sink, 0);
} }
public static ZstdOutputStream from(OutputStream sink, public static ZstdOutputStream from(OutputStream sink,
@@ -49,6 +49,7 @@ public class ZstdOutputStream extends OutputStream {
} }
ZstdCompressionCtx ctx = new ZstdCompressionCtx(); ZstdCompressionCtx ctx = new ZstdCompressionCtx();
ctx.setParameter(CompressionParameter.compressionLevel, compressionLevel); ctx.setParameter(CompressionParameter.compressionLevel, compressionLevel);
ctx.setParameter(CompressionParameter.checksumFlag, 1);
return new ZstdOutputStream(sink, ctx, true); return new ZstdOutputStream(sink, ctx, true);
} }
@@ -62,12 +63,11 @@ public class ZstdOutputStream extends OutputStream {
input.pos = zero; input.pos = zero;
while (true) { while (true) {
size_t rc = ZstdLibrary.compressStream2(ctx.ctx, output, input, flag); size_t rc = ZstdLibrary.compressStream2(ctx.ctx, output, input, flag);
if (output.pos.longValue() > 0) { if (flag == ZSTD_EndDirective.ZSTD_e_end || output.pos.longValue() > output.dst.capacity() / 2) {
int limit = output.pos.intValue(); int toWrite = output.pos.intValue() - output.dst.position();
while(output.dst.position() < limit) {
byte b = output.dst.get(); output.dst.get(buffer, output.dst.position(), toWrite);
sink.write(b); sink.write(buffer, 0, toWrite);
}
output.pos = zero; output.pos = zero;
output.dst.position(0); output.dst.position(0);
} }

View File

@@ -12,7 +12,7 @@ public class ZSTD_inBuffer extends Structure {
public size_t pos; public size_t pos;
public ZSTD_inBuffer(int size) { public ZSTD_inBuffer(int size) {
this.src = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()); this.src = ByteBuffer.allocateDirect(size);
this.size = new size_t(this.src.capacity()); this.size = new size_t(this.src.capacity());
this.pos = new size_t(this.src.capacity()); this.pos = new size_t(this.src.capacity());
} }

View File

@@ -12,7 +12,7 @@ public class ZSTD_outBuffer extends Structure {
public size_t pos; public size_t pos;
public ZSTD_outBuffer(int size) { public ZSTD_outBuffer(int size) {
this.dst = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()); this.dst = ByteBuffer.allocateDirect(size);
this.size = new size_t(dst.capacity()); this.size = new size_t(dst.capacity());
this.pos = new size_t(0); this.pos = new size_t(0);
} }