wan24-Compression 2.4.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package wan24-Compression --version 2.4.0                
NuGet\Install-Package wan24-Compression -Version 2.4.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="wan24-Compression" Version="2.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add wan24-Compression --version 2.4.0                
#r "nuget: wan24-Compression, 2.4.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install wan24-Compression as a Cake Addin
#addin nuget:?package=wan24-Compression&version=2.4.0

// Install wan24-Compression as a Cake Tool
#tool nuget:?package=wan24-Compression&version=2.4.0                

wan24-Compression

This library exports a generic compression API, which allows to use any implemented compression algorithm to be applied using a simple interface.

The goals of this library are:

  • Make a choice being a less torture
  • Make a complex thing as easy as possible

Implementing (new) compression algorithms into (existing) code can be challenging. wan24-Compression tries to make it as easy as possible, while the API is still complex due to the huge number of options it offers.

How to get it

This library is available as NuGet package.

Usage

// Compress memory
byte[] compressed = uncompressed.Compress();
uncompressed = compressed.Decompress();

// Compress a stream
uncompressedStream.Compress(compressedStream, new()
{
    LeaveOpen = true
});
uncompressedStream.SetLength(0);
compressedStream.Decompress(uncompressedStream);

NOTE: The compressed output of this library may include a header, which can't (yet) be interpreted by any third party vendor code. That means, a compressed output of this library can't be decompressed with a third party compression library, even this library implements standard compression algorithms.

Using this library for a compressed sequence which has to be exchanged with a third party application, which relies on working with standard compression algorithm output, is not recommended - it may not work!

Anyway, this library should be a good choice for isolated use within your application(s), if want to avoid a hussle with implementing newer compression algorithms.

Decompression length limit

To avoid compressed bombs, which are tiny, but decompress to huge amounts of data, which may DoS your app, you should set a maximum for the uncompressed data size, if possible:

CompressionOptions options = new CompressionOptions()
    .WithMaxUncompressedDataLength(12345);// Limit to 12345 byte

This limits the decompressed data length effective, even if the uncompressed length is unknown.

NOTE: This limit won't affect compression and is being applied only for decompression! Anyway, it's a security task to set a decompression length limit.

JSON configuration

You could implement a JSON configuration file using the AppConfig logic from wan24-Core, and the CompressionAppConfig. There it's possible to define disabled algorithms, which makes it possible to react to an unwanted algorithm very fast, at any time and without having to update your app, for example. If you use an AppConfig, it could look like this:

public class YourAppConfig : AppConfig
{
    public YourAppConfig() : base() { }

    [AppConfig(AfterBootstrap = true)]
    public CompressionAppConfig? Compression { get; set; }
}

await AppConfig.LoadAsync<YourAppConfig>();

In the config.json in your app root folder:

{
    "Compression":{
        ...
    }
}

Anyway, you could also place and load a CompressionAppConfig in any configuration which supports using that custom type.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (5)

Showing the top 5 NuGet packages that depend on wan24-Compression:

Package Downloads
wan24-Crypto

Crypto helper

wan24-Compression-LZ4

LZ4 adoption for wan24-Compression

wan24-Compression-Shared-Tests

Shared tests for wan24-Compression libraries

wan24-I8N-Compressed

wan24-Core translation terms for the i8n compressed file format

wan24-Compression-Zstd

Zstd adoption for wan24-Compression

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.13.0 260 10/27/2024
2.12.0 267 9/21/2024
2.11.0 211 9/9/2024
2.10.0 434 8/16/2024
2.9.1 383 7/13/2024
2.9.0 228 7/6/2024 2.9.0 is deprecated because it is no longer maintained.
2.8.0 390 6/22/2024
2.7.0 426 4/28/2024
2.6.0 164 4/14/2024
2.5.0 361 3/9/2024
2.4.0 212 3/2/2024
2.3.0 244 2/24/2024
2.2.0 333 2/10/2024
2.1.0 214 1/20/2024
2.0.0 182 12/17/2023
1.20.2 298 11/11/2023
1.20.1 342 10/21/2023
1.20.0 317 10/15/2023
1.19.0 303 10/7/2023
1.18.0 243 9/27/2023
1.17.1 187 9/19/2023
1.17.0 251 9/19/2023
1.16.0 225 9/16/2023
1.15.0 243 9/10/2023
1.14.0 262 9/3/2023
1.13.1 276 7/30/2023
1.13.0 268 7/30/2023
1.12.0 367 7/22/2023
1.11.0 363 6/8/2023
1.10.1 318 6/3/2023
1.10.0 258 6/3/2023
1.9.0 273 5/29/2023
1.8.0 293 5/27/2023
1.7.0 309 5/20/2023
1.6.0 446 5/6/2023
1.5.0 383 5/1/2023
1.4.0 436 4/30/2023
1.3.0 369 4/29/2023
1.2.1 641 4/26/2023
1.2.0 298 4/25/2023
1.1.0 327 4/22/2023
1.0.0 241 4/17/2023