Shuttle.Core.Compression
21.0.1-beta
Prefix Reserved
dotnet add package Shuttle.Core.Compression --version 21.0.1-beta
NuGet\Install-Package Shuttle.Core.Compression -Version 21.0.1-beta
<PackageReference Include="Shuttle.Core.Compression" Version="21.0.1-beta" />
<PackageVersion Include="Shuttle.Core.Compression" Version="21.0.1-beta" />
<PackageReference Include="Shuttle.Core.Compression" />
paket add Shuttle.Core.Compression --version 21.0.1-beta
#r "nuget: Shuttle.Core.Compression, 21.0.1-beta"
#:package Shuttle.Core.Compression@21.0.1-beta
#addin nuget:?package=Shuttle.Core.Compression&version=21.0.1-beta&prerelease
#tool nuget:?package=Shuttle.Core.Compression&version=21.0.1-beta&prerelease
Shuttle.Core.Compression
Provides a compression adapter through the ICompressionAlgorithm interface.
Implementations available in this package:
DeflateCompressionAlgorithm(name: "Deflate")GZipCompressionAlgorithm(name: "GZip")NullCompressionAlgorithm(name: "null")
There is also an ICompressionService that acts as a central container for all registered ICompressionAlgorithm implementations.
Installation
dotnet add package Shuttle.Core.Compression
Algorithm Names
When retrieving algorithms from the service, use these exact names:
"GZip"- For GZip compression"Deflate"- For Deflate compression"null"- For null/pass-through compression (useful for testing scenarios or when compression needs to be disabled)
Configuration
In order to add compression:
services.AddCompression();
This will try to add the CompressionService singleton.
In order to add specific compression algorithms use the relevant builder calls:
services.AddCompression(builder => {
builder.AddGZip();
builder.AddDeflate();
builder.AddNull();
});
Note: The
AddGZip(),AddDeflate(), andAddNull()methods are provided as extension methods from separate files.
Usage
The ICompressionService can be injected into any class that requires compression services:
Using Byte Arrays
var algorithm = compressionService.Get("algorithm-name");
var compressed = await algorithm.CompressAsync(Encoding.UTF8.GetBytes("some data"));
var decompressed = await algorithm.DecompressAsync(compressed);
Using Streams
Convenient extension methods are available for working with streams:
using var inputStream = new MemoryStream(Encoding.UTF8.GetBytes("some data"));
await using var compressedStream = await algorithm.CompressAsync(inputStream);
await using var decompressedStream = await algorithm.DecompressAsync(compressedStream);
using var reader = new StreamReader(decompressedStream);
var result = await reader.ReadToEndAsync();
Performance Considerations
The compression algorithms use a MemoryStreamCache manager to optimize memory allocation and reduce garbage collection pressure. This cached memory pool improves performance for frequent compression/decompression operations.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection (>= 10.0.1)
- Microsoft.IO.RecyclableMemoryStream (>= 3.0.1)
- Shuttle.Core.Contract (>= 21.0.1-beta)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Shuttle.Core.Compression:
| Package | Downloads |
|---|---|
|
Shuttle.Esb
Contains the core Shuttle.Esb assembly that should always be referenced when building Shuttle.Esb solutions. |
|
|
Shuttle.Recall
Event sourcing mechanism. |
|
|
Shuttle.Hopper
Hopper is a flexible enterprise service bus which works with Azure Storage Queues, Amazon SQS, RabbitMQ, Kafka, and Event Hubs through a provider plugin API. |
GitHub repositories
This package is not used by any popular GitHub repositories.