Escorp.Atom.IO.Compression
0.0.4
dotnet add package Escorp.Atom.IO.Compression --version 0.0.4
NuGet\Install-Package Escorp.Atom.IO.Compression -Version 0.0.4
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.4" />
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.4" />
<PackageReference Include="Escorp.Atom.IO.Compression" />
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.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Escorp.Atom.IO.Compression, 0.0.4"
#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.4
#: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.4
#tool nuget:?package=Escorp.Atom.IO.Compression&version=0.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
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 | 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- Escorp.Atom (>= 0.9.5)
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.