Escorp.Atom.IO.Compression 0.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package Escorp.Atom.IO.Compression --version 0.0.3
                    
NuGet\Install-Package Escorp.Atom.IO.Compression -Version 0.0.3
                    
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="Escorp.Atom.IO.Compression" Version="0.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Escorp.Atom.IO.Compression" Version="0.0.3" />
                    
Directory.Packages.props
<PackageReference Include="Escorp.Atom.IO.Compression" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Escorp.Atom.IO.Compression --version 0.0.3
                    
#r "nuget: Escorp.Atom.IO.Compression, 0.0.3"
                    
#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.
#:package Escorp.Atom.IO.Compression@0.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Escorp.Atom.IO.Compression&version=0.0.3
                    
Install as a Cake Addin
#tool nuget:?package=Escorp.Atom.IO.Compression&version=0.0.3
                    
Install as a Cake Tool

Atom.IO.Compression

Высокопроизводительная библиотека сжатия данных для .NET, реализующая алгоритм Zstandard (RFC 8878) без внешних зависимостей.

Основные возможности

  • Полностью управляемая реализация — без нативных библиотек и P/Invoke
  • Потоковый API — наследует System.IO.Stream для интеграции с существующим кодом
  • Поддержка словарей — форматированные словари (magic 0xEC30A437) и raw-content
  • Контрольная сумма — xxHash64 (RFC 8878 Content Checksum)
  • Уровни сжатия — от 0 (без сжатия) до 22 (максимальное сжатие)
  • Асинхронные операции — полная поддержка async/await

Компоненты

Публичные типы

Тип Описание
ZstdStream Основной потоковый API для сжатия и распаковки
IZstdDictionaryProvider Интерфейс провайдера словарей

Внутренняя архитектура

Модуль реализует полный стек Zstandard:

  • Энтропийное кодирование: FSE (Finite State Entropy) и Huffman
  • Хеширование: xxHash64 для контрольных сумм
  • Поиск совпадений: Hash-chain матчер с настраиваемой глубиной поиска
  • Блоки: RAW, RLE и Compressed согласно спецификации

Использование

Сжатие данных

using System.IO.Compression;
using Atom.IO.Compression;

// Потоковое сжатие
await using var output = File.Create("data.zst");
await using var zstd = new ZstdStream(output, CompressionLevel.Optimal);
await zstd.WriteAsync(data);

Распаковка данных

using System.IO.Compression;
using Atom.IO.Compression;

// Потоковая распаковка
await using var input = File.OpenRead("data.zst");
await using var zstd = new ZstdStream(input, CompressionMode.Decompress);
var buffer = new byte[4096];
int bytesRead;
while ((bytesRead = await zstd.ReadAsync(buffer)) > 0)
{
    // Обработка распакованных данных
}

Использование словарей

// Создание провайдера словарей
public class MyDictionaryProvider : IZstdDictionaryProvider
{
    private readonly Dictionary<uint, byte[]> _dictionaries = new();

    public bool TryGet(uint dictionaryId, out ReadOnlyMemory<byte> dictionaryBytes)
    {
        if (_dictionaries.TryGetValue(dictionaryId, out var bytes))
        {
            dictionaryBytes = bytes;
            return true;
        }
        dictionaryBytes = default;
        return false;
    }
}

// Использование со словарём
await using var zstd = new ZstdStream(stream, CompressionMode.Decompress)
{
    DictionaryProvider = new MyDictionaryProvider()
};

Расширенные настройки

await using var zstd = new ZstdStream(output, compressionLevel: 6, leaveOpen: true)
{
    IsContentChecksumEnabled = true,    // Добавить xxHash64 checksum
    IsSingleSegment = false,            // Потоковый режим
    WindowSize = 8 * 1024 * 1024,       // Размер окна 8 МБ
    DictionaryId = 12345,               // ID словаря
    DictionaryProvider = provider,
    UseDictionaryTablesForSequences = true,
    UseDictionaryHuffmanForLiterals = true,
    UseInterBlockHistory = true,
    FrameContentSize = totalSize        // Опциональный размер контента
};

Структура модуля

Zstd/
├── ZstdStream.cs              # Публичный потоковый API
├── ZstdEncoder.cs             # Внутренний энкодер
├── ZstdDecoder.cs             # Внутренний декодер
├── ZstdMatcher.cs             # Поиск совпадений
├── ZstdSeqEncoder.cs          # Кодирование последовательностей
├── FseCompressor.cs           # FSE кодирование
├── FseDecoder.cs              # FSE декодирование
├── HuffmanDecoder.cs          # Huffman декодирование
├── XxHash64.cs                # Хеширование xxHash64
├── ZstdLengthsTables.cs       # Предопределённые таблицы
├── ZstdEncoderWorkspace.cs    # Пул рабочих буферов энкодера
├── ZstdDecoderWorkspace.cs    # Пул рабочих буферов декодера
└── ...                        # Вспомогательные типы

Совместимость

  • Полная совместимость с libzstd и другими реализациями (ZstdSharp, ZstdNet)
  • Поддержка skippable-кадров
  • Корректная обработка Content Checksum

Производительность

Реализация оптимизирована для .NET с использованием:

  • Span<T> и Memory<T> для zero-allocation операций
  • Пулы буферов (ZstdEncoderWorkspacePool, ZstdDecoderWorkspacePool)
  • SIMD-оптимизации через System.Numerics.Vector<T>
  • Aggressive inlining критических путей

Ограничения текущей версии

  • Максимальный размер окна: 128 МБ
  • Максимальный размер блока: 128 КБ (по RFC 8878)

Тестирование

Модуль покрыт тестами, включающими:

  • Кросс-проверку с референсными реализациями
  • Потоковые тесты с различными размерами чанков
  • Проверку целостности через SHA256
  • Устойчивость к skippable-блокам

Ссылки

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Escorp.Atom.IO.Compression:

Package Downloads
Escorp.Atom.Net

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.0.4 434 12/5/2025
0.0.3 294 11/30/2025
0.0.2 249 11/14/2025
0.0.1 191 10/12/2025