wan24-Compression
2.10.0
See the version list below for details.
dotnet add package wan24-Compression --version 2.10.0
NuGet\Install-Package wan24-Compression -Version 2.10.0
<PackageReference Include="wan24-Compression" Version="2.10.0" />
paket add wan24-Compression --version 2.10.0
#r "nuget: wan24-Compression, 2.10.0"
// Install wan24-Compression as a Cake Addin #addin nuget:?package=wan24-Compression&version=2.10.0 // Install wan24-Compression as a Cake Tool #tool nuget:?package=wan24-Compression&version=2.10.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
In case you don't use the wan24-Core
bootstrapper logic, you need to
initialize the library first, before you can use it:
wan24.Compression.Bootstrapper.Boot();
This will initialize the wan24-Compression
library.
// 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 | Versions 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. |
-
net8.0
- Stream-Serializer-Extensions (>= 3.9.0)
- wan24-Core (>= 2.34.0)
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 | 241 | 10/27/2024 | |
2.12.0 | 267 | 9/21/2024 | |
2.11.0 | 207 | 9/9/2024 | |
2.10.0 | 422 | 8/16/2024 | |
2.9.1 | 379 | 7/13/2024 | |
2.9.0 | 228 | 7/6/2024 | |
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 |