omnizip 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +32 -0
- data/.rubocop_todo.yml +754 -0
- data/COPYING +502 -0
- data/Gemfile +17 -0
- data/LICENSE +12 -0
- data/README.adoc +1045 -0
- data/Rakefile +12 -0
- data/benchmark/README.md +260 -0
- data/benchmark/benchmark_suite.rb +125 -0
- data/benchmark/compression_bench.rb +181 -0
- data/benchmark/filter_bench.rb +180 -0
- data/benchmark/models/benchmark_result.rb +59 -0
- data/benchmark/models/comparison_result.rb +69 -0
- data/benchmark/profile_suite.rb +167 -0
- data/benchmark/reporter.rb +150 -0
- data/benchmark/run_benchmarks.rb +66 -0
- data/benchmark/test_data.rb +137 -0
- data/config/formats/rar3_spec.yml +91 -0
- data/config/formats/rar5_spec.yml +102 -0
- data/docs/.github/workflows/docs.yml +142 -0
- data/docs/.gitignore +21 -0
- data/docs/.lychee.toml +67 -0
- data/docs/Gemfile +13 -0
- data/docs/RAR_WRITE_SUPPORT.md +26 -0
- data/docs/README.md +101 -0
- data/docs/_config.yml +112 -0
- data/docs/assets/logo.svg +1 -0
- data/docs/assets/omnizip-logo.pdf +1540 -11
- data/docs/comparison/feature-matrix.adoc +694 -0
- data/docs/comparison/index.adoc +113 -0
- data/docs/comparison/vs-7zip.adoc +309 -0
- data/docs/comparison/vs-peazip.adoc +77 -0
- data/docs/comparison/vs-rubyzip.adoc +342 -0
- data/docs/comparison/vs-winrar.adoc +100 -0
- data/docs/compatibility.adoc +579 -0
- data/docs/concepts/index.adoc +129 -0
- data/docs/developer/architecture.adoc +256 -0
- data/docs/developer/contributing.adoc +158 -0
- data/docs/developer/index.adoc +25 -0
- data/docs/developer/testing.adoc +212 -0
- data/docs/getting-started/basic-usage.adoc +271 -0
- data/docs/getting-started/index.adoc +42 -0
- data/docs/getting-started/installation.adoc +138 -0
- data/docs/getting-started/quick-start.adoc +185 -0
- data/docs/getting-started/your-first-archive.adoc +218 -0
- data/docs/guides/advanced-features/encryption.adoc +300 -0
- data/docs/guides/advanced-features/index.adoc +49 -0
- data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
- data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
- data/docs/guides/advanced-features/streaming.adoc +212 -0
- data/docs/guides/archive-formats/gzip-format.adoc +107 -0
- data/docs/guides/archive-formats/index.adoc +130 -0
- data/docs/guides/archive-formats/rar-format.adoc +104 -0
- data/docs/guides/archive-formats/rar5.adoc +521 -0
- data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
- data/docs/guides/archive-formats/tar-format.adoc +106 -0
- data/docs/guides/archive-formats/xz-format.adoc +118 -0
- data/docs/guides/archive-formats/zip-format.adoc +35 -0
- data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
- data/docs/guides/compression-algorithms/deflate.adoc +319 -0
- data/docs/guides/compression-algorithms/index.adoc +190 -0
- data/docs/guides/compression-algorithms/lzma.adoc +398 -0
- data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
- data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
- data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
- data/docs/guides/creating-archives.adoc +354 -0
- data/docs/guides/extracting-archives.adoc +53 -0
- data/docs/guides/format-conversion.adoc +64 -0
- data/docs/guides/index.adoc +49 -0
- data/docs/guides/migration-rubyzip.adoc +217 -0
- data/docs/guides/parity-archives.adoc +605 -0
- data/docs/guides/performance-tuning.adoc +88 -0
- data/docs/index.adoc +218 -0
- data/docs/lychee.toml +67 -0
- data/docs/reference/api/overview.adoc +188 -0
- data/docs/reference/cli/compress-command.adoc +114 -0
- data/docs/reference/cli/overview.adoc +140 -0
- data/docs/reference/index.adoc +26 -0
- data/docs/resources/faq.adoc +185 -0
- data/docs/resources/quick-reference.adoc +222 -0
- data/docs/troubleshooting/index.adoc +208 -0
- data/examples/api_comparison.rb +205 -0
- data/examples/deflate64_example.rb +96 -0
- data/examples/par2_demo.rb +121 -0
- data/examples/quick_start_native.rb +150 -0
- data/examples/quick_start_rubyzip.rb +115 -0
- data/examples/rubyzip_compatibility_demo.rb +194 -0
- data/exe/omnizip +27 -0
- data/lib/omnizip/algorithm.rb +130 -0
- data/lib/omnizip/algorithm_registry.rb +86 -0
- data/lib/omnizip/algorithms/.keep +0 -0
- data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
- data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
- data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
- data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
- data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
- data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
- data/lib/omnizip/algorithms/bzip2.rb +130 -0
- data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
- data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
- data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
- data/lib/omnizip/algorithms/deflate.rb +128 -0
- data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
- data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
- data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
- data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
- data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
- data/lib/omnizip/algorithms/deflate64.rb +109 -0
- data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
- data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
- data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
- data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
- data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
- data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
- data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
- data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
- data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
- data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
- data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
- data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
- data/lib/omnizip/algorithms/lzma/match.rb +32 -0
- data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
- data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
- data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
- data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
- data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
- data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
- data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
- data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
- data/lib/omnizip/algorithms/lzma/state.rb +127 -0
- data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
- data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
- data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
- data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
- data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
- data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
- data/lib/omnizip/algorithms/lzma.rb +238 -0
- data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
- data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
- data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
- data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
- data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
- data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
- data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
- data/lib/omnizip/algorithms/lzma2.rb +141 -0
- data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
- data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
- data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
- data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
- data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
- data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
- data/lib/omnizip/algorithms/ppmd7.rb +116 -0
- data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
- data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
- data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
- data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
- data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
- data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
- data/lib/omnizip/algorithms/ppmd8.rb +82 -0
- data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
- data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
- data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
- data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
- data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
- data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
- data/lib/omnizip/algorithms/zstandard.rb +138 -0
- data/lib/omnizip/buffer/memory_archive.rb +251 -0
- data/lib/omnizip/buffer/memory_extractor.rb +224 -0
- data/lib/omnizip/buffer.rb +176 -0
- data/lib/omnizip/checksum_registry.rb +114 -0
- data/lib/omnizip/checksums/crc32.rb +100 -0
- data/lib/omnizip/checksums/crc64.rb +101 -0
- data/lib/omnizip/checksums/crc_base.rb +158 -0
- data/lib/omnizip/checksums/verifier.rb +131 -0
- data/lib/omnizip/chunked/memory_manager.rb +194 -0
- data/lib/omnizip/chunked/reader.rb +78 -0
- data/lib/omnizip/chunked/writer.rb +120 -0
- data/lib/omnizip/chunked.rb +129 -0
- data/lib/omnizip/cli/output_formatter.rb +104 -0
- data/lib/omnizip/cli.rb +572 -0
- data/lib/omnizip/commands/.keep +0 -0
- data/lib/omnizip/commands/archive_create_command.rb +427 -0
- data/lib/omnizip/commands/archive_extract_command.rb +272 -0
- data/lib/omnizip/commands/archive_list_command.rb +218 -0
- data/lib/omnizip/commands/archive_repair_command.rb +131 -0
- data/lib/omnizip/commands/archive_verify_command.rb +117 -0
- data/lib/omnizip/commands/compress_command.rb +117 -0
- data/lib/omnizip/commands/decompress_command.rb +120 -0
- data/lib/omnizip/commands/list_command.rb +53 -0
- data/lib/omnizip/commands/metadata_command.rb +153 -0
- data/lib/omnizip/commands/parity_create_command.rb +122 -0
- data/lib/omnizip/commands/parity_repair_command.rb +122 -0
- data/lib/omnizip/commands/parity_verify_command.rb +124 -0
- data/lib/omnizip/commands/profile_list_command.rb +56 -0
- data/lib/omnizip/commands/profile_show_command.rb +44 -0
- data/lib/omnizip/convenience.rb +359 -0
- data/lib/omnizip/converter/conversion_registry.rb +49 -0
- data/lib/omnizip/converter/conversion_strategy.rb +121 -0
- data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
- data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
- data/lib/omnizip/converter.rb +105 -0
- data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
- data/lib/omnizip/crypto/aes256/constants.rb +28 -0
- data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
- data/lib/omnizip/crypto/aes256.rb +102 -0
- data/lib/omnizip/error.rb +106 -0
- data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
- data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
- data/lib/omnizip/eta/rate_calculator.rb +104 -0
- data/lib/omnizip/eta/sample_history.rb +143 -0
- data/lib/omnizip/eta/time_estimator.rb +106 -0
- data/lib/omnizip/eta.rb +63 -0
- data/lib/omnizip/extraction/filter_chain.rb +177 -0
- data/lib/omnizip/extraction/glob_pattern.rb +140 -0
- data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
- data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
- data/lib/omnizip/extraction/regex_pattern.rb +50 -0
- data/lib/omnizip/extraction/selective_extractor.rb +240 -0
- data/lib/omnizip/extraction.rb +111 -0
- data/lib/omnizip/file_type/mime_classifier.rb +144 -0
- data/lib/omnizip/file_type.rb +113 -0
- data/lib/omnizip/filter.rb +139 -0
- data/lib/omnizip/filter_pipeline.rb +108 -0
- data/lib/omnizip/filter_registry.rb +166 -0
- data/lib/omnizip/filters/bcj.rb +279 -0
- data/lib/omnizip/filters/bcj2/constants.rb +53 -0
- data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
- data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
- data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
- data/lib/omnizip/filters/bcj2.rb +99 -0
- data/lib/omnizip/filters/bcj_arm.rb +176 -0
- data/lib/omnizip/filters/bcj_arm64.rb +244 -0
- data/lib/omnizip/filters/bcj_ia64.rb +196 -0
- data/lib/omnizip/filters/bcj_ppc.rb +190 -0
- data/lib/omnizip/filters/bcj_sparc.rb +176 -0
- data/lib/omnizip/filters/bcj_x86.rb +193 -0
- data/lib/omnizip/filters/delta.rb +196 -0
- data/lib/omnizip/filters/filter_base.rb +72 -0
- data/lib/omnizip/filters/registry.rb +123 -0
- data/lib/omnizip/filters/xz_delta.rb +258 -0
- data/lib/omnizip/format_detector.rb +162 -0
- data/lib/omnizip/format_registry.rb +59 -0
- data/lib/omnizip/formats/.keep +0 -0
- data/lib/omnizip/formats/bzip2_file.rb +172 -0
- data/lib/omnizip/formats/cpio/constants.rb +55 -0
- data/lib/omnizip/formats/cpio/entry.rb +385 -0
- data/lib/omnizip/formats/cpio/reader.rb +196 -0
- data/lib/omnizip/formats/cpio/writer.rb +234 -0
- data/lib/omnizip/formats/cpio.rb +140 -0
- data/lib/omnizip/formats/format_spec_loader.rb +230 -0
- data/lib/omnizip/formats/gzip.rb +238 -0
- data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
- data/lib/omnizip/formats/iso/directory_record.rb +152 -0
- data/lib/omnizip/formats/iso/joliet.rb +204 -0
- data/lib/omnizip/formats/iso/path_table.rb +125 -0
- data/lib/omnizip/formats/iso/reader.rb +197 -0
- data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
- data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
- data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
- data/lib/omnizip/formats/iso/writer.rb +530 -0
- data/lib/omnizip/formats/iso.rb +140 -0
- data/lib/omnizip/formats/lzip.rb +175 -0
- data/lib/omnizip/formats/lzma_alone.rb +171 -0
- data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
- data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
- data/lib/omnizip/formats/rar/block_parser.rb +243 -0
- data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
- data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
- data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
- data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
- data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
- data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
- data/lib/omnizip/formats/rar/constants.rb +82 -0
- data/lib/omnizip/formats/rar/decompressor.rb +238 -0
- data/lib/omnizip/formats/rar/external_writer.rb +312 -0
- data/lib/omnizip/formats/rar/header.rb +192 -0
- data/lib/omnizip/formats/rar/license_validator.rb +109 -0
- data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
- data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
- data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
- data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
- data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
- data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
- data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
- data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
- data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
- data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
- data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
- data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
- data/lib/omnizip/formats/rar/reader.rb +366 -0
- data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
- data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
- data/lib/omnizip/formats/rar/writer.rb +431 -0
- data/lib/omnizip/formats/rar.rb +205 -0
- data/lib/omnizip/formats/rar3/compressor.rb +73 -0
- data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar3/reader.rb +386 -0
- data/lib/omnizip/formats/rar3/writer.rb +219 -0
- data/lib/omnizip/formats/rar5/compressor.rb +73 -0
- data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar5/reader.rb +342 -0
- data/lib/omnizip/formats/rar5/writer.rb +214 -0
- data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
- data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
- data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
- data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
- data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
- data/lib/omnizip/formats/seven_zip/header.rb +106 -0
- data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
- data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
- data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
- data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
- data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
- data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
- data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
- data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
- data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
- data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
- data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
- data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
- data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
- data/lib/omnizip/formats/seven_zip.rb +93 -0
- data/lib/omnizip/formats/tar/constants.rb +73 -0
- data/lib/omnizip/formats/tar/entry.rb +94 -0
- data/lib/omnizip/formats/tar/header.rb +168 -0
- data/lib/omnizip/formats/tar/reader.rb +121 -0
- data/lib/omnizip/formats/tar/writer.rb +216 -0
- data/lib/omnizip/formats/tar.rb +84 -0
- data/lib/omnizip/formats/xz/reader.rb +116 -0
- data/lib/omnizip/formats/xz.rb +237 -0
- data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
- data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
- data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
- data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
- data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
- data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
- data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
- data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
- data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
- data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
- data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
- data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
- data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
- data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
- data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
- data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
- data/lib/omnizip/formats/zip/constants.rb +69 -0
- data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
- data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
- data/lib/omnizip/formats/zip/reader.rb +250 -0
- data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
- data/lib/omnizip/formats/zip/writer.rb +375 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
- data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
- data/lib/omnizip/formats/zip.rb +50 -0
- data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
- data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
- data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
- data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
- data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
- data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
- data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
- data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
- data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
- data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
- data/lib/omnizip/io/buffered_input.rb +146 -0
- data/lib/omnizip/io/buffered_output.rb +105 -0
- data/lib/omnizip/io/stream_manager.rb +115 -0
- data/lib/omnizip/link_handler/hard_link.rb +79 -0
- data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
- data/lib/omnizip/link_handler.rb +124 -0
- data/lib/omnizip/metadata/archive_metadata.rb +114 -0
- data/lib/omnizip/metadata/entry_metadata.rb +146 -0
- data/lib/omnizip/metadata/metadata_editor.rb +171 -0
- data/lib/omnizip/metadata/metadata_registry.rb +64 -0
- data/lib/omnizip/metadata/metadata_validator.rb +99 -0
- data/lib/omnizip/metadata.rb +57 -0
- data/lib/omnizip/models/.keep +0 -0
- data/lib/omnizip/models/algorithm_metadata.rb +73 -0
- data/lib/omnizip/models/compression_options.rb +71 -0
- data/lib/omnizip/models/conversion_options.rb +87 -0
- data/lib/omnizip/models/conversion_result.rb +135 -0
- data/lib/omnizip/models/eta_result.rb +46 -0
- data/lib/omnizip/models/extraction_rule.rb +115 -0
- data/lib/omnizip/models/filter_chain.rb +144 -0
- data/lib/omnizip/models/filter_config.rb +183 -0
- data/lib/omnizip/models/match_result.rb +124 -0
- data/lib/omnizip/models/optimization_suggestion.rb +91 -0
- data/lib/omnizip/models/parallel_options.rb +104 -0
- data/lib/omnizip/models/performance_result.rb +79 -0
- data/lib/omnizip/models/profile_report.rb +82 -0
- data/lib/omnizip/models/progress_options.rb +38 -0
- data/lib/omnizip/models/split_options.rb +116 -0
- data/lib/omnizip/optimization_registry.rb +81 -0
- data/lib/omnizip/parallel/job_queue.rb +209 -0
- data/lib/omnizip/parallel/job_scheduler.rb +203 -0
- data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
- data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
- data/lib/omnizip/parallel/worker_pool.rb +223 -0
- data/lib/omnizip/parallel.rb +149 -0
- data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
- data/lib/omnizip/parity/galois16.rb +145 -0
- data/lib/omnizip/parity/models/creator_packet.rb +73 -0
- data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
- data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
- data/lib/omnizip/parity/models/main_packet.rb +128 -0
- data/lib/omnizip/parity/models/packet.rb +156 -0
- data/lib/omnizip/parity/models/packet_registry.rb +109 -0
- data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
- data/lib/omnizip/parity/par2_creator.rb +531 -0
- data/lib/omnizip/parity/par2_repairer.rb +407 -0
- data/lib/omnizip/parity/par2_verifier.rb +364 -0
- data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
- data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
- data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
- data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
- data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
- data/lib/omnizip/parity.rb +186 -0
- data/lib/omnizip/password/encryption_registry.rb +65 -0
- data/lib/omnizip/password/encryption_strategy.rb +96 -0
- data/lib/omnizip/password/password_validator.rb +129 -0
- data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
- data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
- data/lib/omnizip/password.rb +87 -0
- data/lib/omnizip/pipe/stream_compressor.rb +124 -0
- data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
- data/lib/omnizip/pipe.rb +121 -0
- data/lib/omnizip/platform/ntfs_streams.rb +201 -0
- data/lib/omnizip/platform.rb +189 -0
- data/lib/omnizip/profile/archive_profile.rb +39 -0
- data/lib/omnizip/profile/balanced_profile.rb +33 -0
- data/lib/omnizip/profile/binary_profile.rb +36 -0
- data/lib/omnizip/profile/compression_profile.rb +158 -0
- data/lib/omnizip/profile/custom_profile.rb +157 -0
- data/lib/omnizip/profile/fast_profile.rb +33 -0
- data/lib/omnizip/profile/maximum_profile.rb +33 -0
- data/lib/omnizip/profile/profile_detector.rb +110 -0
- data/lib/omnizip/profile/profile_registry.rb +161 -0
- data/lib/omnizip/profile/text_profile.rb +36 -0
- data/lib/omnizip/profile.rb +190 -0
- data/lib/omnizip/profiler/memory_profiler.rb +66 -0
- data/lib/omnizip/profiler/method_profiler.rb +49 -0
- data/lib/omnizip/profiler/report_generator.rb +169 -0
- data/lib/omnizip/profiler.rb +204 -0
- data/lib/omnizip/progress/callback_reporter.rb +36 -0
- data/lib/omnizip/progress/console_reporter.rb +62 -0
- data/lib/omnizip/progress/log_reporter.rb +91 -0
- data/lib/omnizip/progress/operation_progress.rb +118 -0
- data/lib/omnizip/progress/progress_bar.rb +156 -0
- data/lib/omnizip/progress/progress_reporter.rb +40 -0
- data/lib/omnizip/progress/progress_tracker.rb +190 -0
- data/lib/omnizip/progress/silent_reporter.rb +24 -0
- data/lib/omnizip/progress.rb +127 -0
- data/lib/omnizip/rubyzip_compat.rb +63 -0
- data/lib/omnizip/temp/safe_extract.rb +168 -0
- data/lib/omnizip/temp/temp_file.rb +124 -0
- data/lib/omnizip/temp/temp_file_pool.rb +109 -0
- data/lib/omnizip/temp.rb +181 -0
- data/lib/omnizip/version.rb +5 -0
- data/lib/omnizip/zip/entry.rb +156 -0
- data/lib/omnizip/zip/file.rb +485 -0
- data/lib/omnizip/zip/input_stream.rb +273 -0
- data/lib/omnizip/zip/output_stream.rb +324 -0
- data/lib/omnizip.rb +156 -0
- data/readme-docs/advanced-features.adoc +515 -0
- data/readme-docs/api-usage.adoc +444 -0
- data/readme-docs/architecture.adoc +449 -0
- data/readme-docs/archive-formats.adoc +479 -0
- data/readme-docs/cli-usage.adoc +222 -0
- data/readme-docs/compression-algorithms.adoc +442 -0
- data/readme-docs/compression-profiles.adoc +247 -0
- data/readme-docs/encryption-checksums.adoc +328 -0
- data/readme-docs/format-converter.adoc +325 -0
- data/readme-docs/installation.adoc +228 -0
- data/readme-docs/par2-archives.adoc +608 -0
- data/readme-docs/performance-profiler.adoc +389 -0
- data/readme-docs/preprocessing-filters.adoc +280 -0
- data/xz-file-format-1.2.1.txt +1174 -0
- metadata +617 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Compatibility Matrix
|
|
3
|
+
nav_order: 10
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
== Purpose
|
|
7
|
+
|
|
8
|
+
This page provides a comprehensive comparison of Omnizip with other archive utilities to help you make informed decisions about which tool to use for your needs.
|
|
9
|
+
|
|
10
|
+
== Quick Comparison
|
|
11
|
+
|
|
12
|
+
[cols="3,1,1,1,1,1,1,1"]
|
|
13
|
+
|===
|
|
14
|
+
|Feature |Omnizip |rubyzip |7-Zip |WinRAR |PeaZip |libarchive |Info-ZIP
|
|
15
|
+
|
|
16
|
+
|**Language**
|
|
17
|
+
|Pure Ruby
|
|
18
|
+
|Pure Ruby
|
|
19
|
+
|C++
|
|
20
|
+
|C++
|
|
21
|
+
|C++
|
|
22
|
+
|C
|
|
23
|
+
|C
|
|
24
|
+
|
|
25
|
+
|**Formats Supported**
|
|
26
|
+
|11
|
|
27
|
+
|1 (ZIP)
|
|
28
|
+
|20+
|
|
29
|
+
|30+
|
|
30
|
+
|200+
|
|
31
|
+
|30+
|
|
32
|
+
|1 (ZIP)
|
|
33
|
+
|
|
34
|
+
|**No Dependencies**
|
|
35
|
+
|✅
|
|
36
|
+
|✅
|
|
37
|
+
|❌
|
|
38
|
+
|❌
|
|
39
|
+
|❌
|
|
40
|
+
|❌
|
|
41
|
+
|❌
|
|
42
|
+
|
|
43
|
+
|**Cross-Platform**
|
|
44
|
+
|✅
|
|
45
|
+
|✅
|
|
46
|
+
|✅
|
|
47
|
+
|Windows
|
|
48
|
+
|✅
|
|
49
|
+
|✅
|
|
50
|
+
|✅
|
|
51
|
+
|
|
52
|
+
|**LZMA/LZMA2**
|
|
53
|
+
|✅
|
|
54
|
+
|❌
|
|
55
|
+
|✅
|
|
56
|
+
|✅
|
|
57
|
+
|✅
|
|
58
|
+
|✅
|
|
59
|
+
|❌
|
|
60
|
+
|
|
61
|
+
|**Advanced Algorithms**
|
|
62
|
+
|8 algorithms
|
|
63
|
+
|1 (Deflate)
|
|
64
|
+
|8+
|
|
65
|
+
|10+
|
|
66
|
+
|Varies
|
|
67
|
+
|Multiple
|
|
68
|
+
|1
|
|
69
|
+
|
|
70
|
+
|**AES Encryption**
|
|
71
|
+
|✅
|
|
72
|
+
|Partial
|
|
73
|
+
|✅
|
|
74
|
+
|✅
|
|
75
|
+
|✅
|
|
76
|
+
|✅
|
|
77
|
+
|❌
|
|
78
|
+
|
|
79
|
+
|**Streaming Support**
|
|
80
|
+
|✅
|
|
81
|
+
|✅
|
|
82
|
+
|Partial
|
|
83
|
+
|Partial
|
|
84
|
+
|❌
|
|
85
|
+
|✅
|
|
86
|
+
|Partial
|
|
87
|
+
|
|
88
|
+
|**Progress Tracking**
|
|
89
|
+
|✅
|
|
90
|
+
|❌
|
|
91
|
+
|✅
|
|
92
|
+
|✅
|
|
93
|
+
|✅
|
|
94
|
+
|❌
|
|
95
|
+
|❌
|
|
96
|
+
|
|
97
|
+
|**Parallel Processing**
|
|
98
|
+
|✅
|
|
99
|
+
|❌
|
|
100
|
+
|✅
|
|
101
|
+
|✅
|
|
102
|
+
|Partial
|
|
103
|
+
|❌
|
|
104
|
+
|❌
|
|
105
|
+
|
|
106
|
+
|**Ruby API**
|
|
107
|
+
|✅
|
|
108
|
+
|✅
|
|
109
|
+
|❌
|
|
110
|
+
|❌
|
|
111
|
+
|❌
|
|
112
|
+
|Bindings
|
|
113
|
+
|❌
|
|
114
|
+
|
|
115
|
+
|**Active Development**
|
|
116
|
+
|✅
|
|
117
|
+
|✅
|
|
118
|
+
|✅
|
|
119
|
+
|✅
|
|
120
|
+
|✅
|
|
121
|
+
|✅
|
|
122
|
+
|⚠️
|
|
123
|
+
|===
|
|
124
|
+
|
|
125
|
+
== Detailed Comparisons
|
|
126
|
+
|
|
127
|
+
=== Omnizip vs Rubyzip
|
|
128
|
+
|
|
129
|
+
[cols="2,1,1,3"]
|
|
130
|
+
|===
|
|
131
|
+
|Feature |Omnizip |rubyzip |Notes
|
|
132
|
+
|
|
133
|
+
|**Archive Formats**
|
|
134
|
+
|ZIP, 7z, +9 more
|
|
135
|
+
|ZIP only
|
|
136
|
+
|Omnizip supports multiple formats
|
|
137
|
+
|
|
138
|
+
|**Compression Algorithms**
|
|
139
|
+
|8 algorithms
|
|
140
|
+
|1 (Deflate)
|
|
141
|
+
|LZMA2, PPMd, Zstandard, etc.
|
|
142
|
+
|
|
143
|
+
|**API Compatibility**
|
|
144
|
+
|100%
|
|
145
|
+
|Native
|
|
146
|
+
|Drop-in replacement possible
|
|
147
|
+
|
|
148
|
+
|**Encryption**
|
|
149
|
+
|AES-256, WinZip AES
|
|
150
|
+
|Traditional, AES (partial)
|
|
151
|
+
|Stronger encryption options
|
|
152
|
+
|
|
153
|
+
|**Performance**
|
|
154
|
+
|Similar
|
|
155
|
+
|Baseline
|
|
156
|
+
|Pure Ruby, comparable speed
|
|
157
|
+
|
|
158
|
+
|**Memory Usage**
|
|
159
|
+
|Configurable
|
|
160
|
+
|Standard
|
|
161
|
+
|Streaming reduces memory
|
|
162
|
+
|
|
163
|
+
|**Parallel Processing**
|
|
164
|
+
|✅
|
|
165
|
+
|❌
|
|
166
|
+
|2-3x speedup available
|
|
167
|
+
|
|
168
|
+
|**File Size Limits**
|
|
169
|
+
|Unlimited (ZIP64)
|
|
170
|
+
|ZIP64 supported
|
|
171
|
+
|Both handle large files
|
|
172
|
+
|===
|
|
173
|
+
|
|
174
|
+
**Migration Path**: Use `require 'omnizip/rubyzip_compat'` for seamless migration.
|
|
175
|
+
|
|
176
|
+
=== Omnizip vs 7-Zip
|
|
177
|
+
|
|
178
|
+
[cols="2,1,1,3"]
|
|
179
|
+
|===
|
|
180
|
+
|Feature |Omnizip |7-Zip |Notes
|
|
181
|
+
|
|
182
|
+
|**Implementation**
|
|
183
|
+
|Pure Ruby
|
|
184
|
+
|Native C++
|
|
185
|
+
|Different performance characteristics
|
|
186
|
+
|
|
187
|
+
|**Compression Ratio**
|
|
188
|
+
|95%+ of 7-Zip
|
|
189
|
+
|Best-in-class
|
|
190
|
+
|Comparable results
|
|
191
|
+
|
|
192
|
+
|**Speed**
|
|
193
|
+
|10-60x slower
|
|
194
|
+
|Fastest
|
|
195
|
+
|Trade-off for portability
|
|
196
|
+
|
|
197
|
+
|**API Access**
|
|
198
|
+
|Ruby API
|
|
199
|
+
|CLI only
|
|
200
|
+
|Programmatic vs command-line
|
|
201
|
+
|
|
202
|
+
|**Memory Efficiency**
|
|
203
|
+
|Configurable
|
|
204
|
+
|Optimized
|
|
205
|
+
|Streaming available in both
|
|
206
|
+
|
|
207
|
+
|**Parallel Processing**
|
|
208
|
+
|2-3x speedup
|
|
209
|
+
|3-4x speedup
|
|
210
|
+
|Both support multi-core
|
|
211
|
+
|
|
212
|
+
|**Format Support**
|
|
213
|
+
|ZIP, 7z, +9
|
|
214
|
+
|20+ formats
|
|
215
|
+
|7-Zip supports more formats
|
|
216
|
+
|
|
217
|
+
|**Platform Support**
|
|
218
|
+
|All (Ruby)
|
|
219
|
+
|Cross-platform
|
|
220
|
+
|Both widely available
|
|
221
|
+
|===
|
|
222
|
+
|
|
223
|
+
**When to Choose Omnizip**: Need Ruby API, programmatic control, or rubyzip compatibility
|
|
224
|
+
**When to Choose 7-Zip**: Maximum speed, CLI tools, broader format support
|
|
225
|
+
|
|
226
|
+
=== Omnizip vs WinRAR
|
|
227
|
+
|
|
228
|
+
[cols="2,1,1,3"]
|
|
229
|
+
|===
|
|
230
|
+
|Feature |Omnizip |WinRAR |Notes
|
|
231
|
+
|
|
232
|
+
|**RAR Format**
|
|
233
|
+
|Read-only
|
|
234
|
+
|Read/Write
|
|
235
|
+
|License restrictions on RAR creation
|
|
236
|
+
|
|
237
|
+
|**Compression**
|
|
238
|
+
|8 algorithms
|
|
239
|
+
|10+ algorithms
|
|
240
|
+
|Both offer advanced compression
|
|
241
|
+
|
|
242
|
+
|**Licensing**
|
|
243
|
+
|LGPL 2.1 (Free)
|
|
244
|
+
|Proprietary (Paid)
|
|
245
|
+
|Omnizip is free and open source
|
|
246
|
+
|
|
247
|
+
|**Platform**
|
|
248
|
+
|All platforms
|
|
249
|
+
|Primarily Windows
|
|
250
|
+
|Omnizip more portable
|
|
251
|
+
|
|
252
|
+
|**API**
|
|
253
|
+
|Full Ruby API
|
|
254
|
+
|Limited
|
|
255
|
+
|Better programmatic access
|
|
256
|
+
|
|
257
|
+
|**Recovery Records**
|
|
258
|
+
|Limited
|
|
259
|
+
|Excellent
|
|
260
|
+
|WinRAR stronger for recovery
|
|
261
|
+
|===
|
|
262
|
+
|
|
263
|
+
=== Omnizip vs libarchive
|
|
264
|
+
|
|
265
|
+
[cols="2,1,1,3"]
|
|
266
|
+
|===
|
|
267
|
+
|Feature |Omnizip |libarchive |Notes
|
|
268
|
+
|
|
269
|
+
|**Language**
|
|
270
|
+
|Pure Ruby
|
|
271
|
+
|C library
|
|
272
|
+
|Different integration approaches
|
|
273
|
+
|
|
274
|
+
|**Format Support**
|
|
275
|
+
|11 formats
|
|
276
|
+
|30+ formats
|
|
277
|
+
|libarchive more comprehensive
|
|
278
|
+
|
|
279
|
+
|**Dependencies**
|
|
280
|
+
|None
|
|
281
|
+
|System library
|
|
282
|
+
|Omnizip easier to deploy
|
|
283
|
+
|
|
284
|
+
|**Performance**
|
|
285
|
+
|Good
|
|
286
|
+
|Excellent
|
|
287
|
+
|Native C is faster
|
|
288
|
+
|
|
289
|
+
|**API Quality**
|
|
290
|
+
|Ruby-native
|
|
291
|
+
|C API + bindings
|
|
292
|
+
|Omnizip more Ruby-friendly
|
|
293
|
+
|
|
294
|
+
|**Streaming**
|
|
295
|
+
|✅ Full
|
|
296
|
+
|✅ Full
|
|
297
|
+
|Both excel at streaming
|
|
298
|
+
|===
|
|
299
|
+
|
|
300
|
+
== Feature Matrix by Tool
|
|
301
|
+
|
|
302
|
+
=== Compression Algorithms
|
|
303
|
+
|
|
304
|
+
[cols="2,1,1,1,1,1"]
|
|
305
|
+
|===
|
|
306
|
+
|Algorithm |Omnizip |rubyzip |7-Zip |WinRAR |libarchive
|
|
307
|
+
|
|
308
|
+
|Store (no compression)
|
|
309
|
+
|✅
|
|
310
|
+
|✅
|
|
311
|
+
|✅
|
|
312
|
+
|✅
|
|
313
|
+
|✅
|
|
314
|
+
|
|
315
|
+
|Deflate
|
|
316
|
+
|✅
|
|
317
|
+
|✅
|
|
318
|
+
|✅
|
|
319
|
+
|✅
|
|
320
|
+
|✅
|
|
321
|
+
|
|
322
|
+
|Deflate64
|
|
323
|
+
|✅
|
|
324
|
+
|❌
|
|
325
|
+
|✅
|
|
326
|
+
|✅
|
|
327
|
+
|❌
|
|
328
|
+
|
|
329
|
+
|LZMA
|
|
330
|
+
|✅
|
|
331
|
+
|❌
|
|
332
|
+
|✅
|
|
333
|
+
|✅
|
|
334
|
+
|✅
|
|
335
|
+
|
|
336
|
+
|LZMA2
|
|
337
|
+
|✅
|
|
338
|
+
|❌
|
|
339
|
+
|✅
|
|
340
|
+
|✅
|
|
341
|
+
|✅
|
|
342
|
+
|
|
343
|
+
|BZip2
|
|
344
|
+
|✅
|
|
345
|
+
|❌
|
|
346
|
+
|✅
|
|
347
|
+
|✅
|
|
348
|
+
|✅
|
|
349
|
+
|
|
350
|
+
|PPMd7/8
|
|
351
|
+
|✅
|
|
352
|
+
|❌
|
|
353
|
+
|✅
|
|
354
|
+
|✅
|
|
355
|
+
|❌
|
|
356
|
+
|
|
357
|
+
|Zstandard
|
|
358
|
+
|✅
|
|
359
|
+
|❌
|
|
360
|
+
|✅
|
|
361
|
+
|❌
|
|
362
|
+
|✅
|
|
363
|
+
|===
|
|
364
|
+
|
|
365
|
+
=== Archive Formats
|
|
366
|
+
|
|
367
|
+
[cols="2,1,1,1,1,1"]
|
|
368
|
+
|===
|
|
369
|
+
|Format |Omnizip |rubyzip |7-Zip |WinRAR |libarchive
|
|
370
|
+
|
|
371
|
+
|ZIP
|
|
372
|
+
|✅ Full
|
|
373
|
+
|✅ Full
|
|
374
|
+
|✅ Full
|
|
375
|
+
|✅ Full
|
|
376
|
+
|✅ Full
|
|
377
|
+
|
|
378
|
+
|ZIP64
|
|
379
|
+
|✅
|
|
380
|
+
|✅
|
|
381
|
+
|✅
|
|
382
|
+
|✅
|
|
383
|
+
|✅
|
|
384
|
+
|
|
385
|
+
|7z
|
|
386
|
+
|✅ Full
|
|
387
|
+
|❌
|
|
388
|
+
|✅ Full
|
|
389
|
+
|✅ Full
|
|
390
|
+
|Partial
|
|
391
|
+
|
|
392
|
+
|RAR
|
|
393
|
+
|Read-only
|
|
394
|
+
|❌
|
|
395
|
+
|Read-only
|
|
396
|
+
|✅ Full
|
|
397
|
+
|Read-only
|
|
398
|
+
|
|
399
|
+
|TAR
|
|
400
|
+
|✅
|
|
401
|
+
|❌
|
|
402
|
+
|✅
|
|
403
|
+
|✅
|
|
404
|
+
|✅ Full
|
|
405
|
+
|
|
406
|
+
|GZIP
|
|
407
|
+
|✅
|
|
408
|
+
|❌
|
|
409
|
+
|✅
|
|
410
|
+
|✅
|
|
411
|
+
|✅
|
|
412
|
+
|
|
413
|
+
|BZIP2
|
|
414
|
+
|✅
|
|
415
|
+
|❌
|
|
416
|
+
|✅
|
|
417
|
+
|✅
|
|
418
|
+
|✅
|
|
419
|
+
|
|
420
|
+
|XZ
|
|
421
|
+
|✅
|
|
422
|
+
|❌
|
|
423
|
+
|✅
|
|
424
|
+
|✅
|
|
425
|
+
|✅
|
|
426
|
+
|
|
427
|
+
|ISO
|
|
428
|
+
|Read-only
|
|
429
|
+
|❌
|
|
430
|
+
|✅
|
|
431
|
+
|✅
|
|
432
|
+
|✅
|
|
433
|
+
|===
|
|
434
|
+
|
|
435
|
+
== Use Case Recommendations
|
|
436
|
+
|
|
437
|
+
=== Choose Omnizip When:
|
|
438
|
+
|
|
439
|
+
✅ You need a pure Ruby solution (no native extensions)
|
|
440
|
+
✅ You want 7-Zip format support in Ruby
|
|
441
|
+
✅ You're migrating from rubyzip and need better compression
|
|
442
|
+
✅ You need both ZIP and 7z formats in one library
|
|
443
|
+
✅ You want programmatic Ruby API with good documentation
|
|
444
|
+
✅ You need streaming and in-memory operations
|
|
445
|
+
✅ Cross-platform consistency is critical
|
|
446
|
+
|
|
447
|
+
=== Choose Rubyzip When:
|
|
448
|
+
|
|
449
|
+
✅ You only need ZIP format support
|
|
450
|
+
✅ You have existing rubyzip code to maintain
|
|
451
|
+
✅ Pure simplicity is more important than features
|
|
452
|
+
✅ ZIP compatibility is your only requirement
|
|
453
|
+
|
|
454
|
+
=== Choose 7-Zip When:
|
|
455
|
+
|
|
456
|
+
✅ Maximum compression ratio is required
|
|
457
|
+
✅ You're working with very large files
|
|
458
|
+
✅ Command-line interface is acceptable
|
|
459
|
+
✅ Native C++ performance is essential
|
|
460
|
+
✅ You need the broadest format support
|
|
461
|
+
|
|
462
|
+
=== Choose WinRAR When:
|
|
463
|
+
|
|
464
|
+
✅ You specifically need RAR format write support
|
|
465
|
+
✅ You're primarily on Windows platform
|
|
466
|
+
✅ You have a WinRAR license
|
|
467
|
+
✅ Recovery records are critical
|
|
468
|
+
|
|
469
|
+
== Migration Guides
|
|
470
|
+
|
|
471
|
+
=== From Rubyzip to Omnizip
|
|
472
|
+
|
|
473
|
+
Simplest migration - add one line:
|
|
474
|
+
|
|
475
|
+
[source,ruby]
|
|
476
|
+
----
|
|
477
|
+
# Add this at the top of your file
|
|
478
|
+
require 'omnizip/rubyzip_compat'
|
|
479
|
+
|
|
480
|
+
# All existing Zip::* code now uses Omnizip
|
|
481
|
+
Zip::File.open('archive.zip') do |zip|
|
|
482
|
+
# Works exactly the same
|
|
483
|
+
end
|
|
484
|
+
----
|
|
485
|
+
|
|
486
|
+
See link:guides/migration-rubyzip.html[Complete Migration Guide]
|
|
487
|
+
|
|
488
|
+
=== From 7-Zip CLI to Omnizip API
|
|
489
|
+
|
|
490
|
+
Replace command-line calls with Ruby API:
|
|
491
|
+
|
|
492
|
+
[source,ruby]
|
|
493
|
+
----
|
|
494
|
+
# Instead of: system('7z a archive.7z files/')
|
|
495
|
+
Omnizip::Archive.create('archive.7z', format: :seven_zip) do |archive|
|
|
496
|
+
archive.add_directory('files/')
|
|
497
|
+
end
|
|
498
|
+
----
|
|
499
|
+
|
|
500
|
+
== Performance Comparison
|
|
501
|
+
|
|
502
|
+
[cols="2,1,1,1,1"]
|
|
503
|
+
|===
|
|
504
|
+
|Operation |Omnizip |rubyzip |7-Zip |Relative
|
|
505
|
+
|
|
506
|
+
|Create 100MB ZIP
|
|
507
|
+
|30s
|
|
508
|
+
|28s
|
|
509
|
+
|3s
|
|
510
|
+
|Similar to rubyzip
|
|
511
|
+
|
|
512
|
+
|Extract 100MB ZIP
|
|
513
|
+
|18s
|
|
514
|
+
|17s
|
|
515
|
+
|2s
|
|
516
|
+
|Comparable
|
|
517
|
+
|
|
518
|
+
|Create 100MB 7z
|
|
519
|
+
|45s
|
|
520
|
+
|N/A
|
|
521
|
+
|5s
|
|
522
|
+
|N/A (unique feature)
|
|
523
|
+
|
|
524
|
+
|LZMA2 compression
|
|
525
|
+
|60s
|
|
526
|
+
|N/A
|
|
527
|
+
|4s
|
|
528
|
+
|Pure Ruby trade-off
|
|
529
|
+
|===
|
|
530
|
+
|
|
531
|
+
*Environment: MacBook Pro M1, Ruby 3.2, 10KB files*
|
|
532
|
+
|
|
533
|
+
== Platform Support
|
|
534
|
+
|
|
535
|
+
[cols="2,1,1,1,1"]
|
|
536
|
+
|===
|
|
537
|
+
|Platform |Omnizip |rubyzip |7-Zip |WinRAR
|
|
538
|
+
|
|
539
|
+
|Linux
|
|
540
|
+
|✅ Full
|
|
541
|
+
|✅ Full
|
|
542
|
+
|✅ Full
|
|
543
|
+
|⚠️ Limited
|
|
544
|
+
|
|
545
|
+
|macOS
|
|
546
|
+
|✅ Full
|
|
547
|
+
|✅ Full
|
|
548
|
+
|✅ Full
|
|
549
|
+
|⚠️ Limited
|
|
550
|
+
|
|
551
|
+
|Windows
|
|
552
|
+
|✅ Full
|
|
553
|
+
|✅ Full
|
|
554
|
+
|✅ Full
|
|
555
|
+
|✅ Native
|
|
556
|
+
|
|
557
|
+
|BSD
|
|
558
|
+
|✅ Full
|
|
559
|
+
|✅ Full
|
|
560
|
+
|✅ Full
|
|
561
|
+
|❌
|
|
562
|
+
|===
|
|
563
|
+
|
|
564
|
+
== Summary
|
|
565
|
+
|
|
566
|
+
Omnizip successfully combines:
|
|
567
|
+
|
|
568
|
+
* **rubyzip's ease of use** with drop-in API compatibility
|
|
569
|
+
* **7-Zip's powerful compression** with 95%+ algorithm parity
|
|
570
|
+
* **Unique Ruby-native capabilities** not found in other tools
|
|
571
|
+
|
|
572
|
+
This makes Omnizip ideal for Ruby applications needing advanced compression beyond basic ZIP/Deflate while maintaining compatibility and portability.
|
|
573
|
+
|
|
574
|
+
== See Also
|
|
575
|
+
|
|
576
|
+
* link:getting-started/installation.html[Installation Guide]
|
|
577
|
+
* link:guides/migration-rubyzip.html[Migration from Rubyzip]
|
|
578
|
+
* link:getting-started/quick-start.html[Quick Start Tutorial]
|
|
579
|
+
* link:reference/index.html[API Reference]
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Core Concepts
|
|
3
|
+
nav_order: 40
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
== Core Concepts
|
|
7
|
+
|
|
8
|
+
Understanding the fundamental concepts behind Omnizip's architecture.
|
|
9
|
+
|
|
10
|
+
=== Registry-Based Architecture
|
|
11
|
+
|
|
12
|
+
Omnizip uses a registry pattern for extensibility:
|
|
13
|
+
|
|
14
|
+
==== Algorithm Registry
|
|
15
|
+
|
|
16
|
+
Manages compression algorithms:
|
|
17
|
+
|
|
18
|
+
[source,ruby]
|
|
19
|
+
----
|
|
20
|
+
# List algorithms
|
|
21
|
+
Omnizip::AlgorithmRegistry.registered
|
|
22
|
+
|
|
23
|
+
# Get algorithm
|
|
24
|
+
algorithm = Omnizip::AlgorithmRegistry.get(:lzma2).new(level: 9)
|
|
25
|
+
|
|
26
|
+
# Register custom algorithm
|
|
27
|
+
Omnizip::AlgorithmRegistry.register(:custom, CustomAlgorithm)
|
|
28
|
+
----
|
|
29
|
+
|
|
30
|
+
==== Filter Registry
|
|
31
|
+
|
|
32
|
+
Manages preprocessing filters:
|
|
33
|
+
|
|
34
|
+
[source,ruby]
|
|
35
|
+
----
|
|
36
|
+
# List filters
|
|
37
|
+
Omnizip::FilterRegistry.registered
|
|
38
|
+
|
|
39
|
+
# Get filter
|
|
40
|
+
filter = Omnizip::FilterRegistry.get(:bcj_x86).new
|
|
41
|
+
----
|
|
42
|
+
|
|
43
|
+
==== Format Registry
|
|
44
|
+
|
|
45
|
+
Manages archive formats:
|
|
46
|
+
|
|
47
|
+
[source,ruby]
|
|
48
|
+
----
|
|
49
|
+
# List formats
|
|
50
|
+
Omnizip::FormatRegistry.registered
|
|
51
|
+
|
|
52
|
+
# Get format
|
|
53
|
+
format = Omnizip::FormatRegistry.get(:seven_zip)
|
|
54
|
+
----
|
|
55
|
+
|
|
56
|
+
=== Compression Pipeline
|
|
57
|
+
|
|
58
|
+
Omnizip's compression process:
|
|
59
|
+
|
|
60
|
+
. **Input** - Raw data stream
|
|
61
|
+
. **Filter Chain** - Optional preprocessing (BCJ, Delta)
|
|
62
|
+
. **Compression** - Algorithm compression (LZMA2, etc.)
|
|
63
|
+
. **Archive Container** - Format packaging (7z, ZIP)
|
|
64
|
+
. **Output** - Compressed archive
|
|
65
|
+
|
|
66
|
+
=== Solid Compression
|
|
67
|
+
|
|
68
|
+
Solid archives use a shared dictionary across multiple files:
|
|
69
|
+
|
|
70
|
+
* **Advantage**: 10-30% better compression for similar files
|
|
71
|
+
* **Disadvantage**: Cannot extract individual files independently
|
|
72
|
+
* **Best for**: Source code, text documents, log files
|
|
73
|
+
|
|
74
|
+
=== Multi-Volume Archives
|
|
75
|
+
|
|
76
|
+
Split large archives across multiple files:
|
|
77
|
+
|
|
78
|
+
* **Naming**: archive.7z.001, archive.7z.002, etc.
|
|
79
|
+
* **Use case**: Large files, optical media, file size limits
|
|
80
|
+
* **Extraction**: Automatic from any volume
|
|
81
|
+
|
|
82
|
+
=== Encryption
|
|
83
|
+
|
|
84
|
+
Omnizip supports AES-256 encryption:
|
|
85
|
+
|
|
86
|
+
* **7z**: Header + file encryption
|
|
87
|
+
* **RAR5**: File-only encryption
|
|
88
|
+
* **Algorithm**: AES-256-CBC with PBKDF2 key derivation
|
|
89
|
+
|
|
90
|
+
=== Checksums
|
|
91
|
+
|
|
92
|
+
Integrity verification:
|
|
93
|
+
|
|
94
|
+
* **CRC32**: Fast, common checksum
|
|
95
|
+
* **CRC64**: More reliable for large files
|
|
96
|
+
* **SHA256**: Cryptographic verification
|
|
97
|
+
* **BLAKE2sp**: Fast, secure checksum
|
|
98
|
+
|
|
99
|
+
=== Compression Algorithms
|
|
100
|
+
|
|
101
|
+
==== Dictionary-Based (LZMA/LZMA2)
|
|
102
|
+
|
|
103
|
+
* Sliding window dictionary
|
|
104
|
+
* Range encoding for probabilities
|
|
105
|
+
* High compression ratios
|
|
106
|
+
|
|
107
|
+
==== Statistical (BZip2)
|
|
108
|
+
|
|
109
|
+
* Burrows-Wheeler Transform
|
|
110
|
+
* Move-to-Front coding
|
|
111
|
+
* Huffman encoding
|
|
112
|
+
|
|
113
|
+
==== Context Modeling (PPMd)
|
|
114
|
+
|
|
115
|
+
* Prediction by Partial Matching
|
|
116
|
+
* Context-based probability models
|
|
117
|
+
* Excellent for text
|
|
118
|
+
|
|
119
|
+
==== Dictionary + Huffman (Deflate)
|
|
120
|
+
|
|
121
|
+
* LZ77 sliding window
|
|
122
|
+
* Huffman coding
|
|
123
|
+
* ZIP-compatible
|
|
124
|
+
|
|
125
|
+
=== See Also
|
|
126
|
+
|
|
127
|
+
* link:../developer/architecture[Architecture Details]
|
|
128
|
+
* link:../guides/compression-algorithms/[Algorithm Guides]
|
|
129
|
+
* link:../guides/archive-formats/[Format Guides]
|