mirror of
https://github.com/xerial/snappy-java.git
synced 2025-07-26 23:44:10 +02:00
Applied a patch from Alec Wysocker to postpone the buffer allocation in SnappyInputStream
This commit is contained in:
parent
ae6a126d1c
commit
f027c52899
@ -38,7 +38,6 @@ public class SnappyInputStream extends InputStream
|
|||||||
{
|
{
|
||||||
private boolean finishedReading = false;
|
private boolean finishedReading = false;
|
||||||
protected final InputStream in;
|
protected final InputStream in;
|
||||||
private int blockSize = SnappyOutputStream.DEFAULT_BLOCK_SIZE;
|
|
||||||
|
|
||||||
private byte[] compressed;
|
private byte[] compressed;
|
||||||
private byte[] uncompressed;
|
private byte[] uncompressed;
|
||||||
@ -50,11 +49,6 @@ public class SnappyInputStream extends InputStream
|
|||||||
public SnappyInputStream(InputStream input) throws IOException {
|
public SnappyInputStream(InputStream input) throws IOException {
|
||||||
this.in = input;
|
this.in = input;
|
||||||
readHeader();
|
readHeader();
|
||||||
|
|
||||||
if (compressed == null)
|
|
||||||
compressed = new byte[blockSize];
|
|
||||||
if (uncompressed == null)
|
|
||||||
uncompressed = new byte[blockSize];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void readHeader() throws IOException {
|
protected void readHeader() throws IOException {
|
||||||
@ -70,7 +64,7 @@ public class SnappyInputStream extends InputStream
|
|||||||
|
|
||||||
SnappyCodec codec = SnappyCodec.readHeader(new ByteArrayInputStream(header));
|
SnappyCodec codec = SnappyCodec.readHeader(new ByteArrayInputStream(header));
|
||||||
if (codec.isValidMagicHeader()) {
|
if (codec.isValidMagicHeader()) {
|
||||||
// compressed by SnappyOutputStream
|
// The input data is compressed by SnappyOutputStream
|
||||||
if (codec.version < SnappyCodec.MINIMUM_COMPATIBLE_VERSION) {
|
if (codec.version < SnappyCodec.MINIMUM_COMPATIBLE_VERSION) {
|
||||||
throw new IOException(String.format(
|
throw new IOException(String.format(
|
||||||
"compressed with imcompatible codec version %d. At least version %d is required",
|
"compressed with imcompatible codec version %d. At least version %d is required",
|
||||||
@ -148,7 +142,7 @@ public class SnappyInputStream extends InputStream
|
|||||||
}
|
}
|
||||||
int chunkSize = SnappyOutputStream.readInt(chunkSizeBuf, 0);
|
int chunkSize = SnappyOutputStream.readInt(chunkSizeBuf, 0);
|
||||||
// extend the compressed data buffer size
|
// extend the compressed data buffer size
|
||||||
if (chunkSize > compressed.length) {
|
if (compressed == null || chunkSize > compressed.length) {
|
||||||
compressed = new byte[chunkSize];
|
compressed = new byte[chunkSize];
|
||||||
}
|
}
|
||||||
int readBytes = in.read(compressed, 0, chunkSize);
|
int readBytes = in.read(compressed, 0, chunkSize);
|
||||||
@ -157,7 +151,7 @@ public class SnappyInputStream extends InputStream
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
int uncompressedLength = Snappy.uncompressedLength(compressed, 0, chunkSize);
|
int uncompressedLength = Snappy.uncompressedLength(compressed, 0, chunkSize);
|
||||||
if (uncompressedLength > uncompressed.length) {
|
if (uncompressed == null || uncompressedLength > uncompressed.length) {
|
||||||
uncompressed = new byte[uncompressedLength];
|
uncompressed = new byte[uncompressedLength];
|
||||||
}
|
}
|
||||||
int actualUncompressedLength = Snappy.uncompress(compressed, 0, chunkSize, uncompressed, 0);
|
int actualUncompressedLength = Snappy.uncompress(compressed, 0, chunkSize, uncompressed, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user