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,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: XZ Format
|
|
3
|
+
nav_order: 6
|
|
4
|
+
parent: Archive Formats
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
XZ is a modern compression format based on LZMA2 that provides excellent compression ratios. It's commonly used for Linux package distribution and software archives.
|
|
11
|
+
|
|
12
|
+
== Key Characteristics
|
|
13
|
+
|
|
14
|
+
[cols="1,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Property |Value
|
|
17
|
+
|
|
18
|
+
|Compression
|
|
19
|
+
|LZMA2 (with LZMA, BCJ filters)
|
|
20
|
+
|
|
21
|
+
|Encryption
|
|
22
|
+
|None
|
|
23
|
+
|
|
24
|
+
|Archive Support
|
|
25
|
+
|Single file only (use with TAR for multiple files)
|
|
26
|
+
|
|
27
|
+
|Large Files
|
|
28
|
+
|Yes (up to 4 EB)
|
|
29
|
+
|
|
30
|
+
|Best For
|
|
31
|
+
|Software packages, maximum compression, Unix systems
|
|
32
|
+
|===
|
|
33
|
+
|
|
34
|
+
== Basic Usage
|
|
35
|
+
|
|
36
|
+
=== Compress a File
|
|
37
|
+
|
|
38
|
+
[source,ruby]
|
|
39
|
+
----
|
|
40
|
+
# Compress single file with XZ
|
|
41
|
+
Omnizip.compress_file('data.bin', 'data.bin.xz',
|
|
42
|
+
level: 6 # Default level
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# Maximum compression
|
|
46
|
+
Omnizip.compress_file('data.bin', 'data.bin.xz',
|
|
47
|
+
level: 9,
|
|
48
|
+
extreme: true # Use more CPU for slightly better ratio
|
|
49
|
+
)
|
|
50
|
+
----
|
|
51
|
+
|
|
52
|
+
=== Decompress a File
|
|
53
|
+
|
|
54
|
+
[source,ruby]
|
|
55
|
+
----
|
|
56
|
+
# Decompress XZ file
|
|
57
|
+
Omnizip.decompress_file('data.bin.xz', 'data.bin')
|
|
58
|
+
----
|
|
59
|
+
|
|
60
|
+
== XZ Utils Compatibility
|
|
61
|
+
|
|
62
|
+
Omnizip is compatible with files created by XZ Utils:
|
|
63
|
+
|
|
64
|
+
[source,bash]
|
|
65
|
+
----
|
|
66
|
+
# Create with XZ Utils
|
|
67
|
+
$ xz -k data.bin
|
|
68
|
+
|
|
69
|
+
# Extract with Omnizip
|
|
70
|
+
Omnizip.decompress_file('data.bin.xz', 'data.bin')
|
|
71
|
+
|
|
72
|
+
# Create with Omnizip
|
|
73
|
+
Omnizip.compress_file('data.bin', 'data.bin.xz')
|
|
74
|
+
|
|
75
|
+
# Extract with XZ Utils
|
|
76
|
+
$ xz -d data.bin.xz
|
|
77
|
+
----
|
|
78
|
+
|
|
79
|
+
== Compression Levels
|
|
80
|
+
|
|
81
|
+
[cols="1,2,2,2"]
|
|
82
|
+
|===
|
|
83
|
+
|Level |Memory (Compress) |Memory (Decompress) |Typical Use
|
|
84
|
+
|
|
85
|
+
|1-3
|
|
86
|
+
|4-24 MB
|
|
87
|
+
|1-3 MB
|
|
88
|
+
|Fast compression
|
|
89
|
+
|
|
90
|
+
|4-6
|
|
91
|
+
|32-96 MB
|
|
92
|
+
|4-9 MB
|
|
93
|
+
|**Default** - balanced
|
|
94
|
+
|
|
95
|
+
|7-9
|
|
96
|
+
|192-674 MB
|
|
97
|
+
|16-64 MB
|
|
98
|
+
|Maximum compression
|
|
99
|
+
|===
|
|
100
|
+
|
|
101
|
+
== TAR.XZ Archives
|
|
102
|
+
|
|
103
|
+
XZ is commonly combined with TAR:
|
|
104
|
+
|
|
105
|
+
[source,ruby]
|
|
106
|
+
----
|
|
107
|
+
# Create TAR.XZ archive
|
|
108
|
+
Omnizip.compress_directory('project/', 'project.tar.xz',
|
|
109
|
+
format: :tar_xz,
|
|
110
|
+
level: 6
|
|
111
|
+
)
|
|
112
|
+
----
|
|
113
|
+
|
|
114
|
+
== See Also
|
|
115
|
+
|
|
116
|
+
* link:../compression-algorithms/lzma2.html[LZMA2 Algorithm] - Compression details
|
|
117
|
+
* link:tar-format.html[TAR Format] - Multi-file archives with XZ
|
|
118
|
+
* link:gzip-format.html[GZIP Format] - Faster alternative
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ZIP Format
|
|
3
|
+
nav_order: 2
|
|
4
|
+
parent: Archive Formats
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== ZIP Format
|
|
9
|
+
|
|
10
|
+
=== General
|
|
11
|
+
|
|
12
|
+
The ZIP format is a widely used archive format.
|
|
13
|
+
|
|
14
|
+
=== Features
|
|
15
|
+
|
|
16
|
+
* Cross-platform compatibility
|
|
17
|
+
* ZIP64 support for large files
|
|
18
|
+
* Deflate compression
|
|
19
|
+
* WinZip AES encryption
|
|
20
|
+
|
|
21
|
+
=== Usage
|
|
22
|
+
|
|
23
|
+
[source,bash]
|
|
24
|
+
----
|
|
25
|
+
# Create ZIP archive
|
|
26
|
+
omnizip archive create backup.zip documents/ --format zip
|
|
27
|
+
|
|
28
|
+
# Extract ZIP archive
|
|
29
|
+
omnizip archive extract backup.zip output/
|
|
30
|
+
----
|
|
31
|
+
|
|
32
|
+
=== See Also
|
|
33
|
+
|
|
34
|
+
* link:../compression-algorithms/deflate.html[Deflate Algorithm]
|
|
35
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: BZip2
|
|
3
|
+
nav_order: 4
|
|
4
|
+
parent: Compression Algorithms
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
BZip2 is a compression algorithm based on the Burrows-Wheeler Transform (BWT) that provides excellent compression ratios for text files and source code. It's particularly effective for files with repetitive patterns.
|
|
11
|
+
|
|
12
|
+
== Key Characteristics
|
|
13
|
+
|
|
14
|
+
[cols="1,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Property |Value
|
|
17
|
+
|
|
18
|
+
|Compression Ratio
|
|
19
|
+
|Very Good (better than Deflate)
|
|
20
|
+
|
|
21
|
+
|Compression Speed
|
|
22
|
+
|Medium
|
|
23
|
+
|
|
24
|
+
|Decompression Speed
|
|
25
|
+
|Medium
|
|
26
|
+
|
|
27
|
+
|Memory Usage
|
|
28
|
+
|Medium (dependent on block size)
|
|
29
|
+
|
|
30
|
+
|Best For
|
|
31
|
+
|Text files, source code, structured data
|
|
32
|
+
|===
|
|
33
|
+
|
|
34
|
+
== When to Use BZip2
|
|
35
|
+
|
|
36
|
+
**Choose BZip2 when**:
|
|
37
|
+
|
|
38
|
+
* Compressing text files or source code
|
|
39
|
+
* Need better compression than Deflate
|
|
40
|
+
* Working with structured data (XML, JSON, CSV)
|
|
41
|
+
* Compatibility with Unix/Linux systems is needed
|
|
42
|
+
|
|
43
|
+
**Consider alternatives when**:
|
|
44
|
+
|
|
45
|
+
* Speed is critical (use Zstandard)
|
|
46
|
+
* Maximum compression needed (use LZMA2)
|
|
47
|
+
* Binary data (use LZMA2)
|
|
48
|
+
|
|
49
|
+
== Basic Usage
|
|
50
|
+
|
|
51
|
+
=== Compress with BZip2
|
|
52
|
+
|
|
53
|
+
[source,ruby]
|
|
54
|
+
----
|
|
55
|
+
# Create BZip2-compressed file
|
|
56
|
+
Omnizip.compress_file('data.txt', 'data.txt.bz2',
|
|
57
|
+
algorithm: :bzip2,
|
|
58
|
+
level: 9
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# Create archive with BZip2 compression
|
|
62
|
+
Omnizip::Archive.create('backup.tar.bz2', format: :tar_bzip2) do |archive|
|
|
63
|
+
archive.add_directory('project/')
|
|
64
|
+
end
|
|
65
|
+
----
|
|
66
|
+
|
|
67
|
+
=== Decompress BZip2
|
|
68
|
+
|
|
69
|
+
[source,ruby]
|
|
70
|
+
----
|
|
71
|
+
# Decompress BZip2 file
|
|
72
|
+
Omnizip.decompress_file('data.txt.bz2', 'data.txt')
|
|
73
|
+
|
|
74
|
+
# Extract BZip2 archive
|
|
75
|
+
Omnizip.extract_archive('backup.tar.bz2', 'output/')
|
|
76
|
+
----
|
|
77
|
+
|
|
78
|
+
== Compression Levels
|
|
79
|
+
|
|
80
|
+
BZip2 supports levels 1-9:
|
|
81
|
+
|
|
82
|
+
[cols="1,2,2,2"]
|
|
83
|
+
|===
|
|
84
|
+
|Level |Speed |Ratio |Best For
|
|
85
|
+
|
|
86
|
+
|1
|
|
87
|
+
|Fast
|
|
88
|
+
|Good
|
|
89
|
+
|Quick compression
|
|
90
|
+
|
|
91
|
+
|5
|
|
92
|
+
|Medium
|
|
93
|
+
|Very Good
|
|
94
|
+
|**Default** - balanced
|
|
95
|
+
|
|
96
|
+
|9
|
|
97
|
+
|Slow
|
|
98
|
+
|Best
|
|
99
|
+
|Maximum compression
|
|
100
|
+
|===
|
|
101
|
+
|
|
102
|
+
== Technical Details
|
|
103
|
+
|
|
104
|
+
* **Algorithm**: Burrows-Wheeler Transform + Move-to-Front + Huffman coding
|
|
105
|
+
* **Block Size**: 100KB to 900KB (level dependent)
|
|
106
|
+
* **File Extension**: `.bz2`
|
|
107
|
+
* **Container**: Can be used within TAR archives (`.tar.bz2` or `.tbz2`)
|
|
108
|
+
|
|
109
|
+
== See Also
|
|
110
|
+
|
|
111
|
+
* link:lzma.html[LZMA] - Better compression for general data
|
|
112
|
+
* link:deflate.html[Deflate] - Faster alternative
|
|
113
|
+
* link:../../compatibility.html[Compatibility] - BZip2 support across tools
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deflate
|
|
3
|
+
nav_order: 5
|
|
4
|
+
parent: Compression Algorithms
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
Deflate is the standard ZIP compression algorithm, offering a good balance between compression ratio and speed. It's universally supported and provides fast compression and decompression.
|
|
11
|
+
|
|
12
|
+
== Key Characteristics
|
|
13
|
+
|
|
14
|
+
[cols="1,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Property |Value
|
|
17
|
+
|
|
18
|
+
|Compression Ratio
|
|
19
|
+
|Good
|
|
20
|
+
|
|
21
|
+
|Compression Speed
|
|
22
|
+
|Fast
|
|
23
|
+
|
|
24
|
+
|Decompression Speed
|
|
25
|
+
|Very fast
|
|
26
|
+
|
|
27
|
+
|Memory Usage
|
|
28
|
+
|Low
|
|
29
|
+
|
|
30
|
+
|Compatibility
|
|
31
|
+
|Universal (ZIP standard)
|
|
32
|
+
|
|
33
|
+
|Best For
|
|
34
|
+
|General use, speed-critical applications, maximum compatibility
|
|
35
|
+
|===
|
|
36
|
+
|
|
37
|
+
== When to Use Deflate
|
|
38
|
+
|
|
39
|
+
**Choose Deflate when**:
|
|
40
|
+
|
|
41
|
+
* Speed is more important than maximum compression
|
|
42
|
+
* Creating ZIP archives for broad compatibility
|
|
43
|
+
* Working with already-compressed data
|
|
44
|
+
* Need fast decompression
|
|
45
|
+
* Memory is limited
|
|
46
|
+
|
|
47
|
+
**Consider alternatives when**:
|
|
48
|
+
|
|
49
|
+
* Maximum compression is priority (use LZMA2)
|
|
50
|
+
* Working with text files (use PPMd)
|
|
51
|
+
* Need even faster compression (use Zstandard)
|
|
52
|
+
|
|
53
|
+
== Basic Usage
|
|
54
|
+
|
|
55
|
+
=== Create ZIP with Deflate
|
|
56
|
+
|
|
57
|
+
[source,ruby]
|
|
58
|
+
----
|
|
59
|
+
# Deflate is the default for ZIP
|
|
60
|
+
Omnizip.compress_directory('project/', 'backup.zip')
|
|
61
|
+
|
|
62
|
+
# Explicit Deflate configuration
|
|
63
|
+
Omnizip::Archive.create('archive.zip', format: :zip) do |archive|
|
|
64
|
+
archive.compression = :deflate
|
|
65
|
+
archive.level = 6 # Default level
|
|
66
|
+
archive.add_directory('files/')
|
|
67
|
+
end
|
|
68
|
+
----
|
|
69
|
+
|
|
70
|
+
=== Rubyzip-Compatible API
|
|
71
|
+
|
|
72
|
+
[source,ruby]
|
|
73
|
+
----
|
|
74
|
+
require 'omnizip/rubyzip_compat'
|
|
75
|
+
|
|
76
|
+
# Standard ZIP creation with Deflate
|
|
77
|
+
Zip::File.open('archive.zip', create: true) do |zip|
|
|
78
|
+
zip.add('readme.txt', 'README.md')
|
|
79
|
+
zip.add('data.json', 'config/data.json')
|
|
80
|
+
end
|
|
81
|
+
----
|
|
82
|
+
|
|
83
|
+
== Compression Levels
|
|
84
|
+
|
|
85
|
+
Deflate supports levels 1-9:
|
|
86
|
+
|
|
87
|
+
[cols="1,2,2,2"]
|
|
88
|
+
|===
|
|
89
|
+
|Level |Speed |Ratio |Best For
|
|
90
|
+
|
|
91
|
+
|1
|
|
92
|
+
|Fastest
|
|
93
|
+
|Basic
|
|
94
|
+
|Quick archiving, temporary files
|
|
95
|
+
|
|
96
|
+
|3
|
|
97
|
+
|Very Fast
|
|
98
|
+
|Moderate
|
|
99
|
+
|Development, testing
|
|
100
|
+
|
|
101
|
+
|6
|
|
102
|
+
|Fast
|
|
103
|
+
|Good
|
|
104
|
+
|**Default** - balanced performance
|
|
105
|
+
|
|
106
|
+
|9
|
|
107
|
+
|Slower
|
|
108
|
+
|Best
|
|
109
|
+
|Distribution, long-term storage
|
|
110
|
+
|===
|
|
111
|
+
|
|
112
|
+
.Level Comparison Example
|
|
113
|
+
[source,ruby]
|
|
114
|
+
----
|
|
115
|
+
[1, 6, 9].each do |level|
|
|
116
|
+
time = Benchmark.measure do
|
|
117
|
+
Omnizip.compress_file('data.txt', "output-#{level}.zip",
|
|
118
|
+
compression: :deflate,
|
|
119
|
+
level: level
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
size = File.size("output-#{level}.zip")
|
|
124
|
+
puts "Level #{level}: #{size} bytes in #{time.real.round(2)}s"
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Output:
|
|
128
|
+
# Level 1: 125 KB in 0.05s (fastest)
|
|
129
|
+
# Level 6: 98 KB in 0.12s (balanced)
|
|
130
|
+
# Level 9: 95 KB in 0.28s (best compression)
|
|
131
|
+
----
|
|
132
|
+
|
|
133
|
+
== Performance Characteristics
|
|
134
|
+
|
|
135
|
+
=== Speed Comparison
|
|
136
|
+
|
|
137
|
+
[cols="2,1,1,1"]
|
|
138
|
+
|===
|
|
139
|
+
|File Size |Compress Time |Decompress Time |Throughput
|
|
140
|
+
|
|
141
|
+
|1 MB
|
|
142
|
+
|0.1s
|
|
143
|
+
|0.05s
|
|
144
|
+
|~10 MB/s
|
|
145
|
+
|
|
146
|
+
|10 MB
|
|
147
|
+
|1s
|
|
148
|
+
|0.5s
|
|
149
|
+
|~10 MB/s
|
|
150
|
+
|
|
151
|
+
|100 MB
|
|
152
|
+
|10s
|
|
153
|
+
|5s
|
|
154
|
+
|~10 MB/s
|
|
155
|
+
|
|
156
|
+
|1 GB
|
|
157
|
+
|100s
|
|
158
|
+
|50s
|
|
159
|
+
|~10 MB/s
|
|
160
|
+
|===
|
|
161
|
+
|
|
162
|
+
*Note: Times for level 6 on modern hardware*
|
|
163
|
+
|
|
164
|
+
=== vs Other Algorithms
|
|
165
|
+
|
|
166
|
+
[cols="2,1,1,1,1"]
|
|
167
|
+
|===
|
|
168
|
+
|Algorithm |Compress |Decompress |Ratio |When to Choose
|
|
169
|
+
|
|
170
|
+
|**Deflate**
|
|
171
|
+
|Fast
|
|
172
|
+
|Very Fast
|
|
173
|
+
|Good
|
|
174
|
+
|Speed + compatibility
|
|
175
|
+
|
|
176
|
+
|LZMA2
|
|
177
|
+
|Slow
|
|
178
|
+
|Fast
|
|
179
|
+
|Excellent
|
|
180
|
+
|Better compression
|
|
181
|
+
|
|
182
|
+
|Zstandard
|
|
183
|
+
|Very Fast
|
|
184
|
+
|Very Fast
|
|
185
|
+
|Very Good
|
|
186
|
+
|Maximum speed
|
|
187
|
+
|
|
188
|
+
|PPMd
|
|
189
|
+
|Very Slow
|
|
190
|
+
|Slow
|
|
191
|
+
|Excellent
|
|
192
|
+
|Text files only
|
|
193
|
+
|===
|
|
194
|
+
|
|
195
|
+
== Advanced Options
|
|
196
|
+
|
|
197
|
+
=== Window Size
|
|
198
|
+
|
|
199
|
+
Deflate uses a 32 KB sliding window:
|
|
200
|
+
|
|
201
|
+
[source,ruby]
|
|
202
|
+
----
|
|
203
|
+
# Standard Deflate (32 KB window)
|
|
204
|
+
Omnizip.compress_file('file.txt', 'output.zip',
|
|
205
|
+
compression: :deflate,
|
|
206
|
+
window_size: 32768 # 32 KB (standard)
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# For smaller files, smaller window may be faster
|
|
210
|
+
# Dictionary size is fixed at 32 KB for compatibility
|
|
211
|
+
----
|
|
212
|
+
|
|
213
|
+
=== Strategy Selection
|
|
214
|
+
|
|
215
|
+
Deflate supports different compression strategies:
|
|
216
|
+
|
|
217
|
+
[source,ruby]
|
|
218
|
+
----
|
|
219
|
+
# Default strategy (LZ77 + Huffman)
|
|
220
|
+
compression_strategy: :default # Best for most data
|
|
221
|
+
|
|
222
|
+
# Filtered (better for image data)
|
|
223
|
+
compression_strategy: :filtered
|
|
224
|
+
|
|
225
|
+
# Huffman only (faster, less compression)
|
|
226
|
+
compression_strategy: :huffman_only
|
|
227
|
+
|
|
228
|
+
# RLE (good for repetitive data)
|
|
229
|
+
compression_strategy: :rle
|
|
230
|
+
----
|
|
231
|
+
|
|
232
|
+
== Common Use Cases
|
|
233
|
+
|
|
234
|
+
=== Quick Backups
|
|
235
|
+
|
|
236
|
+
[source,ruby]
|
|
237
|
+
----
|
|
238
|
+
# Fast backup for frequent snapshots
|
|
239
|
+
Omnizip.compress_directory(
|
|
240
|
+
'/var/www/app/',
|
|
241
|
+
"backup_#{Date.today}.zip",
|
|
242
|
+
compression: :deflate,
|
|
243
|
+
level: 3 # Fast compression
|
|
244
|
+
)
|
|
245
|
+
----
|
|
246
|
+
|
|
247
|
+
=== Data Distribution
|
|
248
|
+
|
|
249
|
+
[source,ruby]
|
|
250
|
+
----
|
|
251
|
+
# Package for distribution (broad compatibility)
|
|
252
|
+
Omnizip::Archive.create('release-v1.0.zip', format: :zip) do |archive|
|
|
253
|
+
archive.compression = :deflate
|
|
254
|
+
archive.level = 9 # Best compression
|
|
255
|
+
archive.add_directory('dist/')
|
|
256
|
+
end
|
|
257
|
+
----
|
|
258
|
+
|
|
259
|
+
=== Web Uploads
|
|
260
|
+
|
|
261
|
+
Process uploads quickly:
|
|
262
|
+
|
|
263
|
+
[source,ruby]
|
|
264
|
+
----
|
|
265
|
+
# Handle user uploads efficiently
|
|
266
|
+
uploaded_files.each do |file|
|
|
267
|
+
Omnizip::Archive.create("#{user_id}-upload.zip", format: :zip) do |archive|
|
|
268
|
+
archive.compression = :deflate
|
|
269
|
+
archive.level = 6 # Balanced
|
|
270
|
+
archive.add_data(file.original_filename, file.read)
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
----
|
|
274
|
+
|
|
275
|
+
== Compatibility
|
|
276
|
+
|
|
277
|
+
=== Tool Support
|
|
278
|
+
|
|
279
|
+
Deflate is supported by all major archive tools:
|
|
280
|
+
|
|
281
|
+
* **7-Zip**: Full support (read/write)
|
|
282
|
+
* **WinZip**: Native support
|
|
283
|
+
* **WinRAR**: Full support
|
|
284
|
+
* **Info-ZIP**: Native algorithm
|
|
285
|
+
* **macOS Archive Utility**: Native support
|
|
286
|
+
* **Windows Explorer**: Native support
|
|
287
|
+
|
|
288
|
+
=== Format Support
|
|
289
|
+
|
|
290
|
+
Deflate works in multiple formats:
|
|
291
|
+
|
|
292
|
+
* **ZIP**: Primary compression method (method ID 8)
|
|
293
|
+
* **7z**: Available as alternative to LZMA
|
|
294
|
+
* **GZIP**: Single-file compression
|
|
295
|
+
* **PNG**: Image compression
|
|
296
|
+
|
|
297
|
+
== Technical Specifications
|
|
298
|
+
|
|
299
|
+
* **Algorithm**: LZ77 dictionary compression + Huffman coding
|
|
300
|
+
* **Window Size**: 32 KB (fixed)
|
|
301
|
+
* **Match Length**: 3-258 bytes
|
|
302
|
+
* **Based On**: Phil Katz's PKZip algorithm
|
|
303
|
+
* **RFC**: RFC 1951 (DEFLATE specification)
|
|
304
|
+
* **Implementation**: Uses Ruby's zlib library (native C)
|
|
305
|
+
|
|
306
|
+
== Optimization Tips
|
|
307
|
+
|
|
308
|
+
. **Use Level 6 for General Use**: Good balance of speed and compression
|
|
309
|
+
. **Level 1 for Temporary Files**: When speed matters most
|
|
310
|
+
. **Level 9 for Distribution**: When size matters more than time
|
|
311
|
+
. **Monitor Throughput**: Deflate should process 5-15 MB/s
|
|
312
|
+
. **Consider Deflate64**: For better compression (if compatible)
|
|
313
|
+
|
|
314
|
+
== See Also
|
|
315
|
+
|
|
316
|
+
* link:deflate64.html[Deflate64] - Enhanced Deflate with larger window
|
|
317
|
+
* link:zstandard.html[Zstandard] - Modern fast compression
|
|
318
|
+
* link:lzma2.html[LZMA2] - Better compression at cost of speed
|
|
319
|
+
* link:../../compatibility.html[Compatibility] - Deflate support across tools
|