Avoid the temp mem allocation for reading compressed data in ZipReader.

This commit is contained in:
UnknownShadow200 2016-08-15 18:49:06 +10:00
parent 8c52ada595
commit 4033dcff1a

View File

@ -132,17 +132,15 @@ namespace ClassicalSharp.TexturePack {
return reader.ReadBytes( uncompressedSize ); return reader.ReadBytes( uncompressedSize );
} else if( compressionMethod == 8 ) { // Deflate } else if( compressionMethod == 8 ) { // Deflate
byte[] data = new byte[uncompressedSize]; byte[] data = new byte[uncompressedSize];
byte[] compressedData = reader.ReadBytes( compressedSize );
MemoryStream stream = new MemoryStream( compressedData );
int index = 0, read = 0; int index = 0, read = 0;
DeflateStream inflater = new DeflateStream( stream, CompressionMode.Decompress );
while( index < uncompressedSize && using( DeflateStream ds = new DeflateStream( reader.BaseStream, CompressionMode.Decompress, true ) ) {
(read = inflater.Read( data, index, data.Length - index)) > 0 ) { while( index < uncompressedSize ) {
index += read; read = ds.Read( data, index, data.Length - index);
if( read == 0 ) break;
index += read;
}
} }
inflater.Dispose();
return data; return data;
} else { } else {
Utils.LogDebug( "Unsupported .zip entry compression method: " + compressionMethod ); Utils.LogDebug( "Unsupported .zip entry compression method: " + compressionMethod );