Zlib
Represents the "zlib" compression algorithm.
using Org.BouncyCastle.Utilities.Zlib;
using System.IO;
namespace Renci.SshNet.Compression
{
public class Zlib : Compressor
{
private readonly ZOutputStream _compressor;
private readonly ZOutputStream _decompressor;
private MemoryStream _compressorStream;
private MemoryStream _decompressorStream;
private bool _isDisposed;
public override string Name => "zlib";
public Zlib()
: this(false)
{
}
protected Zlib(bool delayedCompression)
: base(delayedCompression)
{
_compressorStream = new MemoryStream();
_decompressorStream = new MemoryStream();
ZOutputStream val = new ZOutputStream((Stream)_compressorStream, -1);
val.set_FlushMode(1);
_compressor = val;
ZOutputStream val2 = new ZOutputStream((Stream)_decompressorStream);
val2.set_FlushMode(1);
_decompressor = val2;
}
protected override byte[] CompressCore(byte[] data, int offset, int length)
{
_compressorStream.SetLength(0);
((Stream)_compressor).Write(data, offset, length);
((Stream)_compressor).Flush();
return _compressorStream.ToArray();
}
protected override byte[] DecompressCore(byte[] data, int offset, int length)
{
_decompressorStream.SetLength(0);
((Stream)_decompressor).Write(data, offset, length);
((Stream)_decompressor).Flush();
return _decompressorStream.ToArray();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (!_isDisposed && disposing) {
MemoryStream compressorStream = _compressorStream;
if (compressorStream != null) {
compressorStream.Dispose();
_compressorStream = null;
}
MemoryStream decompressorStream = _decompressorStream;
if (decompressorStream != null) {
decompressorStream.Dispose();
_decompressorStream = null;
}
_isDisposed = true;
}
}
}
}