Skip to content

PicoHex/Zaabee.Compression

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zaabee.Compression


Provide an easy way to use compressions. These packages support the wraps and extensions for compressors. It is also the compressor provider for all Zaabee technology stacks like configuration, cache, queue, rpc, etc.

Why use Zaabee.Compression?

There are many compressors in the .NET ecosystem, but they are not easy to use. Zaabee.Compression provides a unified interface / helper / extensions for all compressors, and it is also the compressor provider for all Zaabee technology stacks.

The compressors that Zaabee.Compression supports are as follows:

Compressor Package Reference
Brotli Zaabee.Brotli Brotli.NET
BZip Zaabee.SharpZipLib SharpZipLib
GZip Zaabee.SharpZipLib SharpZipLib
LZ4 Zaabee.LZ4 K4os.Compression.LZ4
LZMA Zaabee.LZMA LZMA-SDK
XZ Zaabee.XZ XZ.NET-netstandard
Zstd Zaabee.Zstd ZstdNet

How to use Zaabee.Compression?

Install

dotnet add package Zaabee.Brotli
dotnet add package Zaabee.SharpZipLib
dotnet add package Zaabee.LZ4
dotnet add package Zaabee.LZMA
dotnet add package Zaabee.XZ
dotnet add package Zaabee.Zstd

Compress

var bytes = Encoding.UTF8.GetBytes("Hello World");

var brotliBytes = bytes.ToBrotli();
var bzipBytes = bytes.ToBZip();
var gzipBytes = bytes.ToGZip();
var lz4Bytes = bytes.ToLz4();
var lzmaBytes = bytes.ToLzma();
var xzBytes = bytes.ToXz();
var zstdBytes = bytes.ToZstd();

Decompress

var brotliDecompressBytes = brotliBytes.UnBrotli();
var bzipDecompressBytes = bzipBytes.UnBZip();
var gzipDecompressBytes = gzipBytes.UnGZip();
var lz4DecompressBytes = lz4Bytes.UnLz4();
var lzmaDecompressBytes = lzmaBytes.UnLzma();
var xzDecompressBytes = xzBytes.UnXz();
var zstdDecompressBytes = zstdBytes.UnZstd();

Compress with stream

var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("Hello World"));

var brotliStream = memoryStream.ToBrotli();
var bzipStream = memoryStream.ToBZip();
var gzipStream = memoryStream.ToGZip();
var lz4Stream = memoryStream.ToLz4();
var lzmaStream = memoryStream.ToLzma();
var xzStream = memoryStream.ToXz();
var zstdStream = memoryStream.ToZstd();

Decompress with stream

var brotliDecompressStream = brotliStream.UnBrotli();
var bzipDecompressStream = bzipStream.UnBZip();
var gzipDecompressStream = gzipStream.UnGZip();
var lz4DecompressStream = lz4Stream.UnLz4();
var lzmaDecompressStream = lzmaStream.UnLzma();
var xzDecompressStream = xzStream.UnXz();
var zstdDecompressStream = zstdStream.UnZstd();

IComepressor

Also you can use the interface IComepressor to compress and decompress. All Zaabee compressors implement this interface.

// Inject (ICompressor compressor)
var bytes = Encoding.UTF8.GetBytes("Hello World");
var compressedBytes = compressor.Compress(bytes);
var decompressedBytes = compressor.Decompress(compressedBytes);

// Or use with stream
var memoryStream = new MemoryStream(bytes);
var compressedStream = compressor.Compress(memoryStream);
var decompressedStream = compressor.Decompress(compressedStream);

// You can use stream out of the box
var compressedStream = new MemoryStream();
compressor.Compress(memoryStream, compressedStream);
var decompressedStream = new MemoryStream();
compressor.Decompress(compressedStream, decompressedStream);

// Also the stream functions support async mode

Benchmark

BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22621.1105/22H2/2022Update/SunValley2)
AMD Ryzen 7 6800H with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK=8.0.100-preview.2.23157.25
  [Host]     : .NET 6.0.15 (6.0.1523.11507), X64 RyuJIT AVX2
  DefaultJob : .NET 6.0.15 (6.0.1523.11507), X64 RyuJIT AVX2

Compress to bytes

Method Mean Error StdDev Median Min Max Gen0 Gen1 Gen2 Allocated
BrotliToBytes 58.171 μs 0.9971 μs 1.2246 μs 57.813 μs 56.325 μs 61.702 μs 8.1177 0.3662 - 67986 B
Bzip2ToBytes 631.366 μs 13.7806 μs 39.3168 μs 626.461 μs 563.547 μs 763.059 μs 840.8203 830.0781 823.2422 12101792 B
GzipToBytes 86.458 μs 1.7207 μs 3.6669 μs 85.666 μs 81.680 μs 95.782 μs 38.0859 15.1367 - 321112 B
Lz4ToBytes 1.394 μs 0.0275 μs 0.0403 μs 1.400 μs 1.336 μs 1.491 μs 0.1221 - - 1024 B
LzmaToBytes 7,045.124 μs 253.8111 μs 748.3677 μs 6,693.738 μs 6,247.715 μs 9,145.466 μs 968.7500 953.1250 929.6875 48880615 B
XzToBytes 174.001 μs 1.4839 μs 1.2391 μs 173.823 μs 172.278 μs 176.960 μs 0.4883 - - 4848 B
ZstdToBytes 4.715 μs 0.0175 μs 0.0137 μs 4.715 μs 4.695 μs 4.746 μs 0.0153 - - 128 B

Decompress from bytes

Method Mean Error StdDev Median Min Max Gen0 Gen1 Gen2 Allocated
BrotliFromBytes 39.426 μs 0.7356 μs 1.1011 μs 39.271 μs 37.872 μs 41.571 μs 13.4888 2.8076 - 95.88 KB
Bzip2FromBytes 259.059 μs 21.2853 μs 62.7601 μs 215.391 μs 206.746 μs 376.599 μs 510.7422 500.9766 500.0000 4477.55 KB
GzipFromBytes 34.385 μs 0.6699 μs 0.8471 μs 34.411 μs 33.315 μs 36.232 μs 7.3853 0.8545 - 60.84 KB
Lz4FromBytes 3.407 μs 0.0677 μs 0.1256 μs 3.437 μs 3.235 μs 3.708 μs 2.5291 0.0916 - 20.69 KB
LzmaFromBytes 199.142 μs 3.3706 μs 3.8816 μs 198.042 μs 194.970 μs 211.838 μs 498.2910 491.6992 491.2109 4150.62 KB
XzFromBytes 41.167 μs 0.3790 μs 0.3360 μs 41.078 μs 40.768 μs 41.675 μs 2.9297 - - 24.38 KB
ZstdFromBytes 2.414 μs 0.0478 μs 0.0850 μs 2.402 μs 2.291 μs 2.610 μs 1.2321 - - 10.09 KB

Compress to stream

Method Mean Error StdDev Min Max Median Gen0 Gen1 Gen2 Allocated
BrotliToStream 53.432 μs 0.9765 μs 0.8656 μs 51.863 μs 54.851 μs 53.436 μs 8.0566 0.3662 - 67308 B
Bzip2ToStream 611.673 μs 12.4545 μs 35.7344 μs 530.748 μs 706.533 μs 610.241 μs 893.5547 882.8125 875.9766 12101857 B
GzipToStream 84.260 μs 1.6760 μs 2.5594 μs 80.827 μs 89.060 μs 83.989 μs 38.0859 15.1367 - 321040 B
Lz4ToStream 1.301 μs 0.0116 μs 0.0102 μs 1.286 μs 1.319 μs 1.299 μs 0.1030 - - 864 B
LzmaToStream 6,530.159 μs 129.0695 μs 138.1029 μs 6,246.068 μs 6,789.923 μs 6,521.767 μs 1000.0000 984.3750 960.9375 48880472 B
XzToStream 179.067 μs 3.5628 μs 4.2413 μs 172.960 μs 185.659 μs 179.572 μs 0.4883 - - 4648 B
ZstdToStream 5.819 μs 0.1149 μs 0.1534 μs 5.597 μs 6.097 μs 5.797 μs 1.2817 0.0458 - 10736 B

Decompress from stream

Method Mean Error StdDev Median Min Max Gen0 Gen1 Gen2 Allocated
BrotliFromStream 38.357 μs 0.5158 μs 0.4825 μs 38.115 μs 37.868 μs 39.138 μs 12.1460 2.4414 - 85.72 KB
Bzip2FromStream 254.942 μs 20.5926 μs 60.7177 μs 212.982 μs 198.327 μs 392.069 μs 505.8594 497.0703 496.0938 4467.51 KB
GzipFromStream 34.692 μs 0.6868 μs 1.3874 μs 34.369 μs 32.555 μs 38.429 μs 6.1646 0.9766 - 50.75 KB
Lz4FromStream 2.922 μs 0.0531 μs 0.0444 μs 2.926 μs 2.844 μs 3.012 μs 1.2970 0.0267 - 10.6 KB
LzmaFromStream 204.926 μs 3.9194 μs 3.0600 μs 203.938 μs 201.239 μs 210.138 μs 500.0000 494.6289 494.1406 4140.54 KB
XzFromStream 40.992 μs 0.8186 μs 0.8406 μs 41.137 μs 39.477 μs 42.377 μs 1.7090 0.0610 - 14.3 KB
ZstdFromStream 3.007 μs 0.0582 μs 0.0924 μs 3.002 μs 2.845 μs 3.198 μs 2.4719 0.0877 - 20.23 KB

Releases

No releases published

Packages

No packages published

Languages