本README.md由DeepSeek生成
中文 | English
MRN (模块化游程N压缩器) 是一个用 C++ 编写的现代模块化压缩工具,结合了多种压缩算法、智能文件类型检测和基于插件的架构。
- 多算法支持: 结合 MoveRun、LZ77 和 Huffman 编码
- 智能压缩: 自动文件类型检测和最优算法选择
- 插件架构: 可扩展设计,支持添加新的压缩算法
- 多线程: 并行处理以提高性能
- 进度跟踪: 大文件操作的实时进度报告
- 跨平台: 支持 Linux、macOS 和 Windows
- MoveRun 压缩器: 结合移动优化和游程编码的高级算法
- LZ77 压缩器: 基于字典的压缩,带滑动窗口
- Huffman 编码器: 基于频率分析的熵压缩
- 自动预设: 文本、二进制、最大、快速和存储模式
- 文件类型检测: 自动选择最优压缩策略
- 默认输出命名: 自动生成输出文件名
- 存档完整性: 内置测试和验证
- C++17 兼容编译器 (GCC 7+、Clang 5+、MSVC 2019+)
- CMake 3.12 或更高版本
- Make 或 Ninja 构建系统
# 克隆仓库
git clone https://github.com/lezi-fun/mrn.git
cd mrn
# 创建构建目录
mkdir build && cd build
# 配置和构建
cmake ..
make
# 可选:系统级安装
sudo make install# 构建并运行
cd build
./mrn --help# 压缩单个文件(自动生成输出文件名)
mrn -c document.txt
# 创建:document.txt.mrn
# 压缩目录
mrn -c my_folder
# 创建:my_folder.mrn
# 指定自定义输出
mrn -c input.jpg -o compressed.mrn
# 使用特定算法
mrn -c data.bin -a moverun
# 多线程压缩
mrn -c large_file.dat -j 4# 使用自动生成的输出目录解压缩
mrn -d archive.mrn
# 解压到:archive/
# 解压到指定目录
mrn -d archive.mrn -o extracted_files
# 强制覆盖现有文件
mrn -d archive.mrn --overwrite# 列出存档内容
mrn -l archive.mrn
# 测试存档完整性
mrn -t archive.mrn
# 列出可用算法
mrn --list-algorithms# 文本文件(针对文本优化)
mrn -c document.txt -p text
# 二进制文件(通用)
mrn -c program.exe -p binary
# 最大压缩(最慢)
mrn -c data.dat -p maximum
# 快速压缩
mrn -c temp_files -p fast
# 存储模式(无压缩,仅打包)
mrn -c files -p store# 启用详细日志
mrn -c large_file.dat -v
# 带进度信息
mrn -c folder -v -j 4MRN 工具
├── 核心引擎
│ ├── 插件管理器
│ ├── 压缩流水线
│ └── 存档格式
├── 算法
│ ├── MoveRun 压缩器
│ ├── LZ77 压缩器
│ └── Huffman 编码器
├── I/O 系统
│ ├── 文件 I/O
│ ├── 目录扫描器
│ └── 存档写入器
└── 工具
├── 线程池
├── 进度跟踪器
└── 日志记录器
- 插件管理器: 动态加载压缩算法
- 压缩流水线: 可配置的预处理和压缩步骤
- 线程池: 高效的并行处理
- 智能检测器: 文件类型分析以优化压缩
- 存档格式: 带元数据和校验和的自定义二进制格式
mrn/
├── include/ # 头文件
│ ├── core/ # 核心组件
│ ├── algorithms/ # 压缩算法
│ ├── io/ # 输入/输出模块
│ └── utils/ # 工具类
├── src/ # 源文件
│ ├── core/ # 核心实现
│ ├── algorithms/ # 算法实现
│ ├── io/ # I/O 实现
│ └── utils/ # 工具实现
├── plugins/ # 插件目录(用于未来扩展)
├── CMakeLists.txt # 构建配置
└── README.md # 本文档
通过实现 CompressionAlgorithm 接口创建新算法:
#include "algorithms/algorithm_base.h"
class MyCustomAlgorithm : public mrn::CompressionAlgorithm {
public:
std::string getName() const override { return "My Algorithm"; }
std::string getVersion() const override { return "1.0"; }
CompressionResult compress(const std::vector<uint8_t>& data) override {
// 在此实现
}
CompressionResult decompress(const std::vector<uint8_t>& data) override {
// 在此实现
}
};# 带符号的调试构建
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
# 带优化的发布构建
cmake -DCMAKE_BUILD_TYPE=Release ..
make
# 带消毒器(Linux/macOS)
cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZERS=ON ..
make| 文件类型 | MoveRun | LZ77 | Huffman | 最佳预设 |
|---|---|---|---|---|
| 文本 | 45% | 52% | 60% | Text |
| 二进制 | 65% | 58% | 70% | Binary |
| 图像 | 95% | 92% | 98% | Store |
| 混合 | 55% | 50% | 65% | Auto |
- MoveRun: 压缩速度快,适合文本
- LZ77: 速度/压缩率平衡,通用
- Huffman: 最佳压缩率,压缩较慢
我们欢迎贡献!请参阅我们的贡献指南了解详情。
- Fork 仓库
- 创建功能分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m '添加惊人功能' - 推送到分支:
git push origin feature/amazing-feature - 打开 Pull Request
- 遵循 Google C++ 风格指南
- 使用有意义的变量名
- 为复杂算法包含注释
- 为新功能编写单元测试
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
- 灵感来源于现代压缩工具如 gzip、bzip2 和 7-zip
- 算法实现基于学术研究和行业标准
- 使用现代 C++ 最佳实践构建
- 问题: GitHub Issues
- 讨论: GitHub Discussions
- 邮箱: 通过 GitHub 个人资料联系
- 额外的压缩算法 (BWT, PPM)
- 流式压缩支持
- 云存储集成
- GUI 界面
- 包管理器支持 (Homebrew, apt 等)
- Web Assembly 构建用于浏览器使用
由 MRN 团队用 ❤️ 制作
English | 中文
MRN (Modular Run-length N-compressor) is a modern, modular compression tool written in C++ that combines multiple compression algorithms with smart file type detection and plugin-based architecture.
- Multi-algorithm Support: Combines MoveRun, LZ77, and Huffman encoding
- Smart Compression: Automatic file type detection and optimal algorithm selection
- Plugin Architecture: Extensible design for adding new compression algorithms
- Multi-threaded: Parallel processing for improved performance
- Progress Tracking: Real-time progress reporting for large operations
- Cross-platform: Runs on Linux, macOS, and Windows
- MoveRun Compressor: Advanced algorithm combining move optimization with run-length encoding
- LZ77 Compressor: Dictionary-based compression with sliding window
- Huffman Encoder: Entropy-based compression using frequency analysis
- Automatic Presets: Text, binary, maximum, fast, and store modes
- File Type Detection: Automatically selects optimal compression strategy
- Default Output Naming: Automatic output filename generation
- Archive Integrity: Built-in testing and verification
- C++17 compatible compiler (GCC 7+, Clang 5+, MSVC 2019+)
- CMake 3.12 or higher
- Make or Ninja build system
# Clone the repository
git clone https://github.com/lezi-fun/mrn.git
cd mrn
# Create build directory
mkdir build && cd build
# Configure and build
cmake ..
make
# Optional: Install system-wide
sudo make install# Build and run
cd build
./mrn --help# Compress a single file (auto-generates output filename)
mrn -c document.txt
# Creates: document.txt.mrn
# Compress a directory
mrn -c my_folder
# Creates: my_folder.mrn
# Specify custom output
mrn -c input.jpg -o compressed.mrn
# Use specific algorithm
mrn -c data.bin -a moverun
# Multi-threaded compression
mrn -c large_file.dat -j 4# Decompress with auto-generated output directory
mrn -d archive.mrn
# Extracts to: archive/
# Decompress to specific directory
mrn -d archive.mrn -o extracted_files
# Force overwrite existing files
mrn -d archive.mrn --overwrite# List archive contents
mrn -l archive.mrn
# Test archive integrity
mrn -t archive.mrn
# List available algorithms
mrn --list-algorithms# Text files (optimized for text)
mrn -c document.txt -p text
# Binary files (general purpose)
mrn -c program.exe -p binary
# Maximum compression (slowest)
mrn -c data.dat -p maximum
# Fast compression
mrn -c temp_files -p fast
# Store mode (no compression, just archive)
mrn -c files -p store# Enable detailed logging
mrn -c large_file.dat -v
# With progress information
mrn -c folder -v -j 4MRN Tool
├── Core Engine
│ ├── Plugin Manager
│ ├── Compression Pipeline
│ └── Archive Format
├── Algorithms
│ ├── MoveRun Compressor
│ ├── LZ77 Compressor
│ └── Huffman Encoder
├── I/O System
│ ├── File I/O
│ ├── Directory Scanner
│ └── Archive Writer
└── Utilities
├── Thread Pool
├── Progress Tracker
└── Logger
- Plugin Manager: Dynamic loading of compression algorithms
- Compression Pipeline: Configurable preprocessing and compression steps
- Thread Pool: Efficient parallel processing
- Smart Detector: File type analysis for optimal compression
- Archive Format: Custom binary format with metadata and checksums
mrn/
├── include/ # Header files
│ ├── core/ # Core components
│ ├── algorithms/ # Compression algorithms
│ ├── io/ # Input/output modules
│ └── utils/ # Utility classes
├── src/ # Source files
│ ├── core/ # Core implementations
│ ├── algorithms/ # Algorithm implementations
│ ├── io/ # I/O implementations
│ └── utils/ # Utility implementations
├── plugins/ # Plugin directory (for future extensions)
├── CMakeLists.txt # Build configuration
└── README.md # This file
Create a new algorithm by implementing the CompressionAlgorithm interface:
#include "algorithms/algorithm_base.h"
class MyCustomAlgorithm : public mrn::CompressionAlgorithm {
public:
std::string getName() const override { return "My Algorithm"; }
std::string getVersion() const override { return "1.0"; }
CompressionResult compress(const std::vector<uint8_t>& data) override {
// Implementation here
}
CompressionResult decompress(const std::vector<uint8_t>& data) override {
// Implementation here
}
};# Debug build with symbols
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
# Release build with optimizations
cmake -DCMAKE_BUILD_TYPE=Release ..
make
# With sanitizers (Linux/macOS)
cmake -DCMAKE_BUILD_TYPE=Debug -DUSE_SANITIZERS=ON ..
make| File Type | MoveRun | LZ77 | Huffman | Best Preset |
|---|---|---|---|---|
| Text | 45% | 52% | 60% | Text |
| Binary | 65% | 58% | 70% | Binary |
| Images | 95% | 92% | 98% | Store |
| Mixed | 55% | 50% | 65% | Auto |
- MoveRun: Fast compression, good for text
- LZ77: Balanced speed/ratio, general purpose
- Huffman: Best ratio, slower compression
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow Google C++ Style Guide
- Use meaningful variable names
- Include comments for complex algorithms
- Write unit tests for new features
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by modern compression tools like gzip, bzip2, and 7-zip
- Algorithm implementations based on academic research and industry standards
- Built with modern C++ best practices
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: Contact through GitHub profile
- Additional compression algorithms (BWT, PPM)
- Streaming compression support
- Cloud storage integration
- GUI interface
- Package manager support (Homebrew, apt, etc.)
- Web assembly build for browser usage
Made with ❤️ by the MRN Team