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,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Comparison
|
|
3
|
+
nav_order: 7
|
|
4
|
+
has_children: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Comparison with Other Tools
|
|
8
|
+
|
|
9
|
+
This section provides detailed comparisons of Omnizip against other popular archive and compression tools.
|
|
10
|
+
|
|
11
|
+
== Overview
|
|
12
|
+
|
|
13
|
+
Omnizip is designed to be a pure Ruby compression library with advanced features. Understanding how it compares to other tools helps you make informed decisions about which tool to use for your needs.
|
|
14
|
+
|
|
15
|
+
== Comparison Topics
|
|
16
|
+
|
|
17
|
+
link:feature-matrix.html[**Feature Comparison Matrix**]::
|
|
18
|
+
Comprehensive feature comparison across all major tools
|
|
19
|
+
|
|
20
|
+
link:vs-rubyzip.html[**Omnizip vs rubyzip**]::
|
|
21
|
+
Detailed comparison with the popular rubyzip gem
|
|
22
|
+
|
|
23
|
+
link:vs-7zip.html[**Omnizip vs 7-Zip**]::
|
|
24
|
+
How Omnizip compares to the native 7-Zip tool
|
|
25
|
+
|
|
26
|
+
link:vs-winrar.html[**Omnizip vs WinRAR**]::
|
|
27
|
+
Comparison with the commercial WinRAR utility
|
|
28
|
+
|
|
29
|
+
link:vs-peazip.html[**Omnizip vs PeaZip**]::
|
|
30
|
+
Open-source alternative comparison
|
|
31
|
+
|
|
32
|
+
== Key Differentiators
|
|
33
|
+
|
|
34
|
+
=== Pure Ruby Implementation
|
|
35
|
+
|
|
36
|
+
Unlike most compression tools, Omnizip is written entirely in Ruby with no C extensions or external dependencies. This provides:
|
|
37
|
+
|
|
38
|
+
* **Portability** - Runs anywhere Ruby runs
|
|
39
|
+
* **Maintainability** - Easy to understand and modify
|
|
40
|
+
* **Security** - No binary dependencies to audit
|
|
41
|
+
* **Debugging** - Full visibility into compression logic
|
|
42
|
+
|
|
43
|
+
=== Multiple Format Support
|
|
44
|
+
|
|
45
|
+
Omnizip supports multiple archive formats in a single library:
|
|
46
|
+
|
|
47
|
+
* ZIP (read/write)
|
|
48
|
+
* 7z (read/write)
|
|
49
|
+
* RAR (read-only)
|
|
50
|
+
* TAR (read/write)
|
|
51
|
+
* ISO (read-only)
|
|
52
|
+
|
|
53
|
+
=== Advanced Algorithms
|
|
54
|
+
|
|
55
|
+
Native implementation of advanced compression algorithms:
|
|
56
|
+
|
|
57
|
+
* LZMA/LZMA2
|
|
58
|
+
* BZip2
|
|
59
|
+
* PPMd7/PPMd8
|
|
60
|
+
* Deflate64
|
|
61
|
+
* Zstandard
|
|
62
|
+
|
|
63
|
+
=== Rubyzip Compatibility
|
|
64
|
+
|
|
65
|
+
Drop-in replacement for the rubyzip gem with enhanced features.
|
|
66
|
+
|
|
67
|
+
== Use Case Recommendations
|
|
68
|
+
|
|
69
|
+
=== Choose Omnizip When
|
|
70
|
+
|
|
71
|
+
* You need pure Ruby implementation
|
|
72
|
+
* You want 7-Zip format support in Ruby
|
|
73
|
+
* You need advanced compression algorithms (LZMA2, PPMd)
|
|
74
|
+
* You're migrating from rubyzip and want better compression
|
|
75
|
+
* You need both ZIP and 7z formats in one library
|
|
76
|
+
* You want good API design and documentation
|
|
77
|
+
|
|
78
|
+
=== Choose Rubyzip When
|
|
79
|
+
|
|
80
|
+
* You only need ZIP format support
|
|
81
|
+
* You want the most mature Ruby ZIP library
|
|
82
|
+
* You have existing rubyzip code to maintain
|
|
83
|
+
* Pure simplicity is more important than features
|
|
84
|
+
|
|
85
|
+
=== Choose 7-Zip When
|
|
86
|
+
|
|
87
|
+
* You need maximum compression ratio
|
|
88
|
+
* You're working with very large files
|
|
89
|
+
* Command-line interface is acceptable
|
|
90
|
+
* Native C++ performance is required
|
|
91
|
+
|
|
92
|
+
=== Choose WinRAR When
|
|
93
|
+
|
|
94
|
+
* You specifically need RAR format write support
|
|
95
|
+
* You're on Windows platform primarily
|
|
96
|
+
* You have a WinRAR license
|
|
97
|
+
|
|
98
|
+
== Performance Considerations
|
|
99
|
+
|
|
100
|
+
As a pure Ruby implementation, Omnizip trades some performance for portability:
|
|
101
|
+
|
|
102
|
+
* **10-60x slower** than native C implementations
|
|
103
|
+
* **Excellent** for Ruby-native environments
|
|
104
|
+
* **Acceptable** for moderate file sizes
|
|
105
|
+
* **Portable** across all platforms
|
|
106
|
+
|
|
107
|
+
See link:../guides/performance-tuning.html[Performance Tuning] for detailed benchmarks.
|
|
108
|
+
|
|
109
|
+
== See Also
|
|
110
|
+
|
|
111
|
+
* link:feature-matrix.html[Complete Feature Matrix]
|
|
112
|
+
* link:../guides/performance-tuning.html[Performance Tuning]
|
|
113
|
+
* link:../guides/migration-rubyzip.html[Migration from Rubyzip]
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Omnizip vs 7-Zip
|
|
3
|
+
nav_order: 3
|
|
4
|
+
parent: Comparison
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Omnizip vs 7-Zip
|
|
8
|
+
|
|
9
|
+
Comparison between Omnizip and the native 7-Zip compression tool.
|
|
10
|
+
|
|
11
|
+
== Overview
|
|
12
|
+
|
|
13
|
+
Omnizip is a pure Ruby implementation of 7-Zip algorithms, while 7-Zip is the original C++ implementation. This comparison helps you understand when to use each tool.
|
|
14
|
+
|
|
15
|
+
== Key Differences
|
|
16
|
+
|
|
17
|
+
[cols="40,30,30",options="header"]
|
|
18
|
+
|===
|
|
19
|
+
|Aspect |Omnizip |7-Zip
|
|
20
|
+
|
|
21
|
+
|**Implementation**
|
|
22
|
+
|Pure Ruby
|
|
23
|
+
|C++
|
|
24
|
+
|
|
25
|
+
|**Dependencies**
|
|
26
|
+
|None
|
|
27
|
+
|System libraries
|
|
28
|
+
|
|
29
|
+
|**Performance**
|
|
30
|
+
|10-60x slower
|
|
31
|
+
|Optimized (baseline)
|
|
32
|
+
|
|
33
|
+
|**Portability**
|
|
34
|
+
|Runs anywhere Ruby runs
|
|
35
|
+
|Requires compilation
|
|
36
|
+
|
|
37
|
+
|**API**
|
|
38
|
+
|Ruby API + CLI
|
|
39
|
+
|CLI only
|
|
40
|
+
|
|
41
|
+
|**Integration**
|
|
42
|
+
|Native Ruby
|
|
43
|
+
|External process
|
|
44
|
+
|
|
45
|
+
|**Platforms**
|
|
46
|
+
|All (Ruby)
|
|
47
|
+
|Multi-platform
|
|
48
|
+
|
|
49
|
+
|===
|
|
50
|
+
|
|
51
|
+
== Feature Parity
|
|
52
|
+
|
|
53
|
+
=== Supported Features
|
|
54
|
+
|
|
55
|
+
**Both Support:**
|
|
56
|
+
|
|
57
|
+
* LZMA/LZMA2 compression
|
|
58
|
+
* BZip2 compression
|
|
59
|
+
* PPMd compression
|
|
60
|
+
* Deflate compression
|
|
61
|
+
* BCJ filters (all architectures)
|
|
62
|
+
* AES-256 encryption
|
|
63
|
+
* Solid archives
|
|
64
|
+
* .7z format (full compatibility)
|
|
65
|
+
|
|
66
|
+
**7-Zip Advantages:**
|
|
67
|
+
|
|
68
|
+
* Native performance
|
|
69
|
+
* GUI application
|
|
70
|
+
* SFX (self-extracting) archives
|
|
71
|
+
* Multi-volume archives
|
|
72
|
+
* Many additional formats (CAB, WIM, etc.)
|
|
73
|
+
* Advanced recovery features
|
|
74
|
+
|
|
75
|
+
**Omnizip Advantages:**
|
|
76
|
+
|
|
77
|
+
* Pure Ruby (no compilation)
|
|
78
|
+
* Programmatic Ruby API
|
|
79
|
+
* Rubyzip compatibility
|
|
80
|
+
* Better error messages
|
|
81
|
+
* Easier debugging
|
|
82
|
+
* No external dependencies
|
|
83
|
+
|
|
84
|
+
== Performance Comparison
|
|
85
|
+
|
|
86
|
+
=== Compression Speed
|
|
87
|
+
|
|
88
|
+
**Test File:** 10KB text data, LZMA level 5
|
|
89
|
+
|
|
90
|
+
* **Omnizip:** ~0.21s (pure Ruby)
|
|
91
|
+
* **7-Zip:** ~0.015s (native C++)
|
|
92
|
+
* **Ratio:** 14x slower
|
|
93
|
+
|
|
94
|
+
=== Decompression Speed
|
|
95
|
+
|
|
96
|
+
**Test File:** 10KB compressed data
|
|
97
|
+
|
|
98
|
+
* **Omnizip:** ~0.03s (pure Ruby)
|
|
99
|
+
* **7-Zip:** ~0.003s (native C++)
|
|
100
|
+
* **Ratio:** 10x slower
|
|
101
|
+
|
|
102
|
+
=== Memory Usage
|
|
103
|
+
|
|
104
|
+
* **Omnizip:** Moderate (Ruby overhead)
|
|
105
|
+
* **7-Zip:** Minimal (optimized C++)
|
|
106
|
+
|
|
107
|
+
See link:../guides/performance-tuning.html[Performance Tuning] for detailed benchmarks.
|
|
108
|
+
|
|
109
|
+
== Compatibility
|
|
110
|
+
|
|
111
|
+
=== Archive Format
|
|
112
|
+
|
|
113
|
+
**100% Compatible** - Archives created by either tool can be read by the other:
|
|
114
|
+
|
|
115
|
+
[source,sh]
|
|
116
|
+
----
|
|
117
|
+
# Create with Omnizip
|
|
118
|
+
omnizip archive create test.7z file.txt
|
|
119
|
+
|
|
120
|
+
# Extract with 7-Zip
|
|
121
|
+
7z x test.7z
|
|
122
|
+
|
|
123
|
+
# Create with 7-Zip
|
|
124
|
+
7z a test2.7z file.txt
|
|
125
|
+
|
|
126
|
+
# Extract with Omnizip
|
|
127
|
+
omnizip archive extract test2.7z
|
|
128
|
+
----
|
|
129
|
+
|
|
130
|
+
=== Algorithm Support
|
|
131
|
+
|
|
132
|
+
Both implementations use the same algorithms:
|
|
133
|
+
|
|
134
|
+
* LZMA SDK algorithms
|
|
135
|
+
* Same compression levels
|
|
136
|
+
* Same filter implementations
|
|
137
|
+
* Compatible encryption
|
|
138
|
+
|
|
139
|
+
== Use Cases
|
|
140
|
+
|
|
141
|
+
=== Choose Omnizip When
|
|
142
|
+
|
|
143
|
+
* **Ruby-native environment** - No compilation needed
|
|
144
|
+
* **Programmatic control** - Direct Ruby API access
|
|
145
|
+
* **Cross-platform** - Guaranteed Ruby portability
|
|
146
|
+
* **Embedded in Ruby apps** - No external dependencies
|
|
147
|
+
* **Development/testing** - Easy debugging in Ruby
|
|
148
|
+
* **Moderate file sizes** - Performance acceptable
|
|
149
|
+
|
|
150
|
+
[source,ruby]
|
|
151
|
+
----
|
|
152
|
+
# Native Ruby integration
|
|
153
|
+
require 'omnizip'
|
|
154
|
+
|
|
155
|
+
Omnizip::Archive.create('backup.7z') do |archive|
|
|
156
|
+
Dir.glob('**/*').each do |file|
|
|
157
|
+
archive.add_file(file) if File.file?(file)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
----
|
|
161
|
+
|
|
162
|
+
=== Choose 7-Zip When
|
|
163
|
+
|
|
164
|
+
* **Maximum performance** - Critical path compression
|
|
165
|
+
* **Very large files** - Multi-GB archives
|
|
166
|
+
* **Production workloads** - High throughput needed
|
|
167
|
+
* **GUI operations** - Visual file management
|
|
168
|
+
* **Batch processing** - System-level operations
|
|
169
|
+
* **Advanced features** - SFX, recovery, etc.
|
|
170
|
+
|
|
171
|
+
[source,sh]
|
|
172
|
+
----
|
|
173
|
+
# Command-line batch processing
|
|
174
|
+
7z a -t7z -m0=lzma2 -mx=9 backup.7z /data/*
|
|
175
|
+
----
|
|
176
|
+
|
|
177
|
+
== Integration Patterns
|
|
178
|
+
|
|
179
|
+
=== Ruby Application with Omnizip
|
|
180
|
+
|
|
181
|
+
[source,ruby]
|
|
182
|
+
----
|
|
183
|
+
require 'omnizip'
|
|
184
|
+
|
|
185
|
+
class BackupService
|
|
186
|
+
def create_backup(source_dir, output_file)
|
|
187
|
+
Omnizip::Archive.create(output_file, format: :seven_zip) do |archive|
|
|
188
|
+
archive.add_directory(source_dir)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def restore_backup(archive_file, target_dir)
|
|
193
|
+
Omnizip::Archive.open(archive_file) do |archive|
|
|
194
|
+
archive.extract_all(target_dir)
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
----
|
|
199
|
+
|
|
200
|
+
=== Ruby Application with 7-Zip (Shell)
|
|
201
|
+
|
|
202
|
+
[source,ruby]
|
|
203
|
+
----
|
|
204
|
+
class BackupService
|
|
205
|
+
def create_backup(source_dir, output_file)
|
|
206
|
+
# Requires 7-Zip installed on system
|
|
207
|
+
system("7z a -t7z #{output_file} #{source_dir}/*")
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def restore_backup(archive_file, target_dir)
|
|
211
|
+
system("7z x #{archive_file} -o#{target_dir}")
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
----
|
|
215
|
+
|
|
216
|
+
== Benchmark Results
|
|
217
|
+
|
|
218
|
+
=== Compression Ratio
|
|
219
|
+
|
|
220
|
+
Both achieve identical compression ratios (same algorithms):
|
|
221
|
+
|
|
222
|
+
[source,text]
|
|
223
|
+
----
|
|
224
|
+
Test File: 1MB text file
|
|
225
|
+
|
|
226
|
+
Omnizip (LZMA, level 9): 245KB (75.9% reduction)
|
|
227
|
+
7-Zip (LZMA, level 9): 245KB (75.9% reduction)
|
|
228
|
+
|
|
229
|
+
Result: Identical compression
|
|
230
|
+
----
|
|
231
|
+
|
|
232
|
+
=== Processing Time
|
|
233
|
+
|
|
234
|
+
[source,text]
|
|
235
|
+
----
|
|
236
|
+
File Size: 1MB
|
|
237
|
+
Algorithm: LZMA, Level 5
|
|
238
|
+
|
|
239
|
+
Omnizip:
|
|
240
|
+
Compression: 2.1s
|
|
241
|
+
Decompression: 0.3s
|
|
242
|
+
|
|
243
|
+
7-Zip:
|
|
244
|
+
Compression: 0.15s
|
|
245
|
+
Decompression: 0.03s
|
|
246
|
+
|
|
247
|
+
Result: 7-Zip is 10-15x faster
|
|
248
|
+
----
|
|
249
|
+
|
|
250
|
+
== Decision Matrix
|
|
251
|
+
|
|
252
|
+
[cols="40,30,30",options="header"]
|
|
253
|
+
|===
|
|
254
|
+
|Requirement |Omnizip |7-Zip
|
|
255
|
+
|
|
256
|
+
|Pure Ruby environment
|
|
257
|
+
|✅ Perfect
|
|
258
|
+
|❌ External
|
|
259
|
+
|
|
260
|
+
|No dependencies
|
|
261
|
+
|✅ None
|
|
262
|
+
|❌ System install
|
|
263
|
+
|
|
264
|
+
|Maximum performance
|
|
265
|
+
|❌ Slower
|
|
266
|
+
|✅ Optimized
|
|
267
|
+
|
|
268
|
+
|Programmatic API
|
|
269
|
+
|✅ Native
|
|
270
|
+
|❌ Shell only
|
|
271
|
+
|
|
272
|
+
|Large files (>100MB)
|
|
273
|
+
|⚠️ Slower
|
|
274
|
+
|✅ Fast
|
|
275
|
+
|
|
276
|
+
|Ruby integration
|
|
277
|
+
|✅ Direct
|
|
278
|
+
|⚠️ Shell exec
|
|
279
|
+
|
|
280
|
+
|Cross-platform
|
|
281
|
+
|✅ Ruby
|
|
282
|
+
|✅ Available
|
|
283
|
+
|
|
284
|
+
|GUI interface
|
|
285
|
+
|❌ None
|
|
286
|
+
|✅ Available
|
|
287
|
+
|
|
288
|
+
|===
|
|
289
|
+
|
|
290
|
+
== Summary
|
|
291
|
+
|
|
292
|
+
**Omnizip** and **7-Zip** are complementary tools:
|
|
293
|
+
|
|
294
|
+
* **Same algorithms** - Identical compression ratios
|
|
295
|
+
* **Same format** - 100% compatible archives
|
|
296
|
+
* **Different goals** - Ruby integration vs. performance
|
|
297
|
+
|
|
298
|
+
Choose based on your primary need:
|
|
299
|
+
|
|
300
|
+
* **Ruby integration** → Omnizip
|
|
301
|
+
* **Maximum speed** → 7-Zip
|
|
302
|
+
|
|
303
|
+
Both can coexist in the same project!
|
|
304
|
+
|
|
305
|
+
== See Also
|
|
306
|
+
|
|
307
|
+
* link:feature-matrix.html[Complete Feature Matrix]
|
|
308
|
+
* link:../guides/performance-tuning.html[Performance Tuning]
|
|
309
|
+
* link:../getting-started/quick-start.html[Quick Start Guide]
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Omnizip vs PeaZip
|
|
3
|
+
nav_order: 5
|
|
4
|
+
parent: Comparison
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Omnizip vs PeaZip
|
|
8
|
+
|
|
9
|
+
Comparison between Omnizip and the open-source PeaZip archiver.
|
|
10
|
+
|
|
11
|
+
== Overview
|
|
12
|
+
|
|
13
|
+
PeaZip is an open-source file archiver with GUI and many format support. Omnizip is a pure Ruby library focused on programmatic compression.
|
|
14
|
+
|
|
15
|
+
== Key Differences
|
|
16
|
+
|
|
17
|
+
[cols="40,30,30",options="header"]
|
|
18
|
+
|===
|
|
19
|
+
|Aspect |Omnizip |PeaZip
|
|
20
|
+
|
|
21
|
+
|Implementation
|
|
22
|
+
|Pure Ruby
|
|
23
|
+
|C++ (native)
|
|
24
|
+
|
|
25
|
+
|Interface
|
|
26
|
+
|API + CLI
|
|
27
|
+
|GUI + CLI
|
|
28
|
+
|
|
29
|
+
|Platform
|
|
30
|
+
|All (Ruby)
|
|
31
|
+
|Windows, Linux
|
|
32
|
+
|
|
33
|
+
|License
|
|
34
|
+
|LGPL 2.1
|
|
35
|
+
|LGPL
|
|
36
|
+
|
|
37
|
+
|Integration
|
|
38
|
+
|Ruby native
|
|
39
|
+
|External tool
|
|
40
|
+
|
|
41
|
+
|Dependencies
|
|
42
|
+
|None
|
|
43
|
+
|System libraries
|
|
44
|
+
|
|
45
|
+
|===
|
|
46
|
+
|
|
47
|
+
== Format Support
|
|
48
|
+
|
|
49
|
+
Both support many formats:
|
|
50
|
+
|
|
51
|
+
* ZIP, 7z, TAR
|
|
52
|
+
* RAR (read-only)
|
|
53
|
+
* ISO, CPIO
|
|
54
|
+
* GZ, BZ2, XZ
|
|
55
|
+
|
|
56
|
+
== When to Choose Each
|
|
57
|
+
|
|
58
|
+
=== Choose Omnizip When
|
|
59
|
+
|
|
60
|
+
* Ruby application integration needed
|
|
61
|
+
* No GUI required
|
|
62
|
+
* Programmatic control essential
|
|
63
|
+
* Cross-platform Ruby deployment
|
|
64
|
+
* No external dependencies wanted
|
|
65
|
+
|
|
66
|
+
=== Choose PeaZip When
|
|
67
|
+
|
|
68
|
+
* GUI interface needed
|
|
69
|
+
* Batch file operations
|
|
70
|
+
* Native performance required
|
|
71
|
+
* Advanced file management
|
|
72
|
+
* Many format conversions
|
|
73
|
+
|
|
74
|
+
== See Also
|
|
75
|
+
|
|
76
|
+
* link:feature-matrix.html[Feature Comparison Matrix]
|
|
77
|
+
* link:vs-7zip.html[Omnizip vs 7-Zip]
|