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();
_compressor = new ZOutputStream(_compressorStream, -1) {
FlushMode = 1
};
_decompressor = new ZOutputStream(_decompressorStream) {
FlushMode = 1
};
}
protected override byte[] CompressCore(byte[] data, int offset, int length)
{
_compressorStream.SetLength(0);
_compressor.Write(data, offset, length);
_compressor.Flush();
return _compressorStream.ToArray();
}
protected override byte[] DecompressCore(byte[] data, int offset, int length)
{
_decompressorStream.SetLength(0);
_decompressor.Write(data, offset, length);
_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;
}
}
}
}