Skip to content

Repository files navigation

Aoxe.Compression

English | 简体中文


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

1. Why use Aoxe.Compression?

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

The compressors that Aoxe.Compression supports are as follows:

PackageCompressorReference
Aoxe.BrotliBrotliBrotli.NET
Aoxe.LZ4LZ4K4os.Compression.LZ4
Aoxe.LZMALZMALZMA-SDK
Aoxe.SharpZipLibBZip2 / Deflate / GZipSharpZipLib
Aoxe.SnappySnappyIronSnappy
Aoxe.SystemIoCompressionBrotli / Deflate / GZip / ZLibSystem.IO.Compression
Aoxe.XZXZXZ.NET-netstandard
Aoxe.ZstdZstdZstdNet

2. How to use Aoxe.Compression?

2.1. Install

You can install the package which you want on nuget

dotnet add package Aoxe.Brotli
dotnet add package Aoxe.LZ4
dotnet add package Aoxe.LZMA
dotnet add package Aoxe.SharpZipLib
dotnet add package Aoxe.Snappy
dotnet add package Aoxe.SystemIoCompression
dotnet add package Aoxe.XZ
dotnet add package Aoxe.Zstd

2.2. Compress (use extension method)

varbytes=Encoding.UTF8.GetBytes("Hello World");varbrotliBytes=bytes.ToBrotli();varbzipBytes=bytes.ToBZip();vargzipBytes=bytes.ToGZip();varlz4Bytes=bytes.ToLz4();varlzmaBytes=bytes.ToLzma();varxzBytes=bytes.ToXz();varzstdBytes=bytes.ToZstd();

2.3. Decompress (use extension method)

varbrotliDecompressBytes=brotliBytes.UnBrotli();varbzipDecompressBytes=bzipBytes.UnBZip();vargzipDecompressBytes=gzipBytes.UnGZip();varlz4DecompressBytes=lz4Bytes.UnLz4();varlzmaDecompressBytes=lzmaBytes.UnLzma();varxzDecompressBytes=xzBytes.UnXz();varzstdDecompressBytes=zstdBytes.UnZstd();

2.4. Compress with stream

varmemoryStream=newMemoryStream(Encoding.UTF8.GetBytes("Hello World"));varbrotliStream=memoryStream.ToBrotli();varbzipStream=memoryStream.ToBZip();vargzipStream=memoryStream.ToGZip();varlz4Stream=memoryStream.ToLz4();varlzmaStream=memoryStream.ToLzma();varxzStream=memoryStream.ToXz();varzstdStream=memoryStream.ToZstd();

2.5. Decompress with stream

varbrotliDecompressStream=brotliStream.UnBrotli();varbzipDecompressStream=bzipStream.UnBZip();vargzipDecompressStream=gzipStream.UnGZip();varlz4DecompressStream=lz4Stream.UnLz4();varlzmaDecompressStream=lzmaStream.UnLzma();varxzDecompressStream=xzStream.UnXz();varzstdDecompressStream=zstdStream.UnZstd();

2.6. IComepressor

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

// Inject (ICompressor compressor)varbytes=Encoding.UTF8.GetBytes("Hello World");varcompressedBytes=compressor.Compress(bytes);vardecompressedBytes=compressor.Decompress(compressedBytes);// Or use with streamvarmemoryStream=newMemoryStream(bytes);varcompressedStream=compressor.Compress(memoryStream);vardecompressedStream=compressor.Decompress(compressedStream);// You can use stream out of the boxvarcompressedStream=newMemoryStream();compressor.Compress(memoryStream,compressedStream);vardecompressedStream=newMemoryStream();compressor.Decompress(compressedStream,decompressedStream);// Also the stream functions support async mode

3. 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

3.1. Compress to bytes

MethodMeanErrorStdDevMedianMinMaxGen0Gen1Gen2Allocated
BrotliToBytes58.171 μs0.9971 μs1.2246 μs57.813 μs56.325 μs61.702 μs8.11770.3662-67986 B
Bzip2ToBytes631.366 μs13.7806 μs39.3168 μs626.461 μs563.547 μs763.059 μs840.8203830.0781823.242212101792 B
GzipToBytes86.458 μs1.7207 μs3.6669 μs85.666 μs81.680 μs95.782 μs38.085915.1367-321112 B
Lz4ToBytes1.394 μs0.0275 μs0.0403 μs1.400 μs1.336 μs1.491 μs0.1221--1024 B
LzmaToBytes7,045.124 μs253.8111 μs748.3677 μs6,693.738 μs6,247.715 μs9,145.466 μs968.7500953.1250929.687548880615 B
XzToBytes174.001 μs1.4839 μs1.2391 μs173.823 μs172.278 μs176.960 μs0.4883--4848 B
ZstdToBytes4.715 μs0.0175 μs0.0137 μs4.715 μs4.695 μs4.746 μs0.0153--128 B

3.2. Decompress from bytes

MethodMeanErrorStdDevMedianMinMaxGen0Gen1Gen2Allocated
BrotliFromBytes39.426 μs0.7356 μs1.1011 μs39.271 μs37.872 μs41.571 μs13.48882.8076-95.88 KB
Bzip2FromBytes259.059 μs21.2853 μs62.7601 μs215.391 μs206.746 μs376.599 μs510.7422500.9766500.00004477.55 KB
GzipFromBytes34.385 μs0.6699 μs0.8471 μs34.411 μs33.315 μs36.232 μs7.38530.8545-60.84 KB
Lz4FromBytes3.407 μs0.0677 μs0.1256 μs3.437 μs3.235 μs3.708 μs2.52910.0916-20.69 KB
LzmaFromBytes199.142 μs3.3706 μs3.8816 μs198.042 μs194.970 μs211.838 μs498.2910491.6992491.21094150.62 KB
XzFromBytes41.167 μs0.3790 μs0.3360 μs41.078 μs40.768 μs41.675 μs2.9297--24.38 KB
ZstdFromBytes2.414 μs0.0478 μs0.0850 μs2.402 μs2.291 μs2.610 μs1.2321--10.09 KB

3.3. Compress to stream

MethodMeanErrorStdDevMinMaxMedianGen0Gen1Gen2Allocated
BrotliToStream53.432 μs0.9765 μs0.8656 μs51.863 μs54.851 μs53.436 μs8.05660.3662-67308 B
Bzip2ToStream611.673 μs12.4545 μs35.7344 μs530.748 μs706.533 μs610.241 μs893.5547882.8125875.976612101857 B
GzipToStream84.260 μs1.6760 μs2.5594 μs80.827 μs89.060 μs83.989 μs38.085915.1367-321040 B
Lz4ToStream1.301 μs0.0116 μs0.0102 μs1.286 μs1.319 μs1.299 μs0.1030--864 B
LzmaToStream6,530.159 μs129.0695 μs138.1029 μs6,246.068 μs6,789.923 μs6,521.767 μs1000.0000984.3750960.937548880472 B
XzToStream179.067 μs3.5628 μs4.2413 μs172.960 μs185.659 μs179.572 μs0.4883--4648 B
ZstdToStream5.819 μs0.1149 μs0.1534 μs5.597 μs6.097 μs5.797 μs1.28170.0458-10736 B

3.4. Decompress from stream

MethodMeanErrorStdDevMedianMinMaxGen0Gen1Gen2Allocated
BrotliFromStream38.357 μs0.5158 μs0.4825 μs38.115 μs37.868 μs39.138 μs12.14602.4414-85.72 KB
Bzip2FromStream254.942 μs20.5926 μs60.7177 μs212.982 μs198.327 μs392.069 μs505.8594497.0703496.09384467.51 KB
GzipFromStream34.692 μs0.6868 μs1.3874 μs34.369 μs32.555 μs38.429 μs6.16460.9766-50.75 KB
Lz4FromStream2.922 μs0.0531 μs0.0444 μs2.926 μs2.844 μs3.012 μs1.29700.0267-10.6 KB
LzmaFromStream204.926 μs3.9194 μs3.0600 μs203.938 μs201.239 μs210.138 μs500.0000494.6289494.14064140.54 KB
XzFromStream40.992 μs0.8186 μs0.8406 μs41.137 μs39.477 μs42.377 μs1.70900.0610-14.3 KB
ZstdFromStream3.007 μs0.0582 μs0.0924 μs3.002 μs2.845 μs3.198 μs2.47190.0877-20.23 KB

Thank`s for JetBrains for the great support in providing assistance and user-friendly environment for my open source projects.

JetBrains

About

Provide an easy way to use compressors like Brotli/BZip/GZip/LZ4/LZMA/XZ/Zstd

Topics

Resources

Stars

4 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages