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,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Streaming Operations
|
|
3
|
+
nav_order: 1
|
|
4
|
+
parent: Advanced Features
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
Streaming operations allow you to process archives without loading entire files into memory. This is essential for handling large archives, web applications, and memory-constrained environments.
|
|
11
|
+
|
|
12
|
+
== Benefits
|
|
13
|
+
|
|
14
|
+
* **Memory Efficient**: Process multi-GB archives with minimal memory footprint
|
|
15
|
+
* **Fast Response**: Start processing immediately without waiting for complete download
|
|
16
|
+
* **Scalable**: Handle archives of any size on servers with limited resources
|
|
17
|
+
* **Web-Friendly**: Perfect for Rails applications and API services
|
|
18
|
+
|
|
19
|
+
== When to Use Streaming
|
|
20
|
+
|
|
21
|
+
[cols="1,3"]
|
|
22
|
+
|===
|
|
23
|
+
|Scenario |Streaming Benefit
|
|
24
|
+
|
|
25
|
+
|Large Archives (>100MB)
|
|
26
|
+
|Avoid loading entire archive into memory
|
|
27
|
+
|
|
28
|
+
|Web Applications
|
|
29
|
+
|Process uploads without temporary files
|
|
30
|
+
|
|
31
|
+
|API Services
|
|
32
|
+
|Stream responses directly to clients
|
|
33
|
+
|
|
34
|
+
|Limited Memory
|
|
35
|
+
|Process on resource-constrained servers
|
|
36
|
+
|
|
37
|
+
|Network Transfers
|
|
38
|
+
|Start processing while downloading
|
|
39
|
+
|===
|
|
40
|
+
|
|
41
|
+
== Creating Archives with Streaming
|
|
42
|
+
|
|
43
|
+
=== Stream to File
|
|
44
|
+
|
|
45
|
+
Create archives by streaming entries one at a time:
|
|
46
|
+
|
|
47
|
+
[source,ruby]
|
|
48
|
+
----
|
|
49
|
+
Omnizip::OutputStream.open('backup.zip', format: :zip) do |stream|
|
|
50
|
+
# Add files as you go - no need to collect them first
|
|
51
|
+
Dir.glob('logs/*.log').each do |file|
|
|
52
|
+
stream.put_next_entry(File.basename(file))
|
|
53
|
+
File.open(file, 'rb') do |f|
|
|
54
|
+
stream.write(f.read)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
----
|
|
59
|
+
|
|
60
|
+
=== Stream to Memory
|
|
61
|
+
|
|
62
|
+
Create archives in memory for immediate use:
|
|
63
|
+
|
|
64
|
+
[source,ruby]
|
|
65
|
+
----
|
|
66
|
+
zip_data = Omnizip::OutputStream.write_buffer(format: :zip) do |stream|
|
|
67
|
+
stream.put_next_entry('report.txt')
|
|
68
|
+
stream.write(generate_report)
|
|
69
|
+
|
|
70
|
+
stream.put_next_entry('data.json')
|
|
71
|
+
stream.write(export_data.to_json)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Send directly over HTTP
|
|
75
|
+
send_data zip_data.string, filename: 'export.zip'
|
|
76
|
+
----
|
|
77
|
+
|
|
78
|
+
== Reading Archives with Streaming
|
|
79
|
+
|
|
80
|
+
=== Extract While Reading
|
|
81
|
+
|
|
82
|
+
Process each file as it's read from the archive:
|
|
83
|
+
|
|
84
|
+
[source,ruby]
|
|
85
|
+
----
|
|
86
|
+
Omnizip::InputStream.open('large-archive.zip') do |stream|
|
|
87
|
+
while entry = stream.get_next_entry
|
|
88
|
+
next if entry.directory?
|
|
89
|
+
|
|
90
|
+
# Process each file immediately
|
|
91
|
+
case entry.name
|
|
92
|
+
when /\.csv$/
|
|
93
|
+
import_csv_data(stream.read)
|
|
94
|
+
when /\.json$/
|
|
95
|
+
process_json(stream.read)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
----
|
|
100
|
+
|
|
101
|
+
=== Selective Extraction
|
|
102
|
+
|
|
103
|
+
Extract only specific files without reading the entire archive:
|
|
104
|
+
|
|
105
|
+
[source,ruby]
|
|
106
|
+
----
|
|
107
|
+
Omnizip::InputStream.open('backup.zip') do |stream|
|
|
108
|
+
while entry = stream.get_next_entry
|
|
109
|
+
# Only extract configuration files
|
|
110
|
+
if entry.name.start_with?('config/')
|
|
111
|
+
File.open(entry.name, 'wb') do |f|
|
|
112
|
+
f.write(stream.read)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
----
|
|
118
|
+
|
|
119
|
+
== Web Application Examples
|
|
120
|
+
|
|
121
|
+
=== Rails Upload Processing
|
|
122
|
+
|
|
123
|
+
Process uploaded archives without temporary files:
|
|
124
|
+
|
|
125
|
+
[source,ruby]
|
|
126
|
+
----
|
|
127
|
+
class ArchiveController < ApplicationController
|
|
128
|
+
def upload
|
|
129
|
+
uploaded = params[:archive]
|
|
130
|
+
|
|
131
|
+
# Process upload stream directly
|
|
132
|
+
files = Omnizip::Buffer.extract_all_to_memory(uploaded.read)
|
|
133
|
+
|
|
134
|
+
files.each do |filename, content|
|
|
135
|
+
# Process each file
|
|
136
|
+
process_file(filename, content)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
render json: { processed: files.count }
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
----
|
|
143
|
+
|
|
144
|
+
=== API Response Streaming
|
|
145
|
+
|
|
146
|
+
Generate and stream archives in API responses:
|
|
147
|
+
|
|
148
|
+
[source,ruby]
|
|
149
|
+
----
|
|
150
|
+
get '/export' do
|
|
151
|
+
content_type 'application/zip'
|
|
152
|
+
attachment 'export.zip'
|
|
153
|
+
|
|
154
|
+
stream do |out|
|
|
155
|
+
buffer = Omnizip::OutputStream.write_buffer do |zip|
|
|
156
|
+
User.find_each do |user|
|
|
157
|
+
zip.put_next_entry("#{user.id}.json")
|
|
158
|
+
zip.write(user.to_json)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
out << buffer.string
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
----
|
|
166
|
+
|
|
167
|
+
== Performance Characteristics
|
|
168
|
+
|
|
169
|
+
[cols="2,1,1,1"]
|
|
170
|
+
|===
|
|
171
|
+
|Operation |Traditional |Streaming |Improvement
|
|
172
|
+
|
|
173
|
+
|100MB Archive
|
|
174
|
+
|100MB RAM
|
|
175
|
+
|~10MB RAM
|
|
176
|
+
|90% reduction
|
|
177
|
+
|
|
178
|
+
|1GB Archive
|
|
179
|
+
|1GB RAM
|
|
180
|
+
|~10MB RAM
|
|
181
|
+
|99% reduction
|
|
182
|
+
|
|
183
|
+
|Web Upload
|
|
184
|
+
|Temp file required
|
|
185
|
+
|No temp file
|
|
186
|
+
|Faster response
|
|
187
|
+
|
|
188
|
+
|Large Extraction
|
|
189
|
+
|Full parse first
|
|
190
|
+
|Start immediately
|
|
191
|
+
|Better UX
|
|
192
|
+
|===
|
|
193
|
+
|
|
194
|
+
== Best Practices
|
|
195
|
+
|
|
196
|
+
. **Use Streaming for Large Files**: Any archive >50MB should use streaming
|
|
197
|
+
. **Process Incrementally**: Don't collect all data before processing
|
|
198
|
+
. **Handle Errors Gracefully**: Stream operations can fail mid-process
|
|
199
|
+
. **Clean Up Resources**: Always use blocks to ensure cleanup
|
|
200
|
+
. **Monitor Memory**: Verify memory stays constant during processing
|
|
201
|
+
|
|
202
|
+
== Limitations
|
|
203
|
+
|
|
204
|
+
* Cannot seek backwards in stream (forward-only processing)
|
|
205
|
+
* Some operations require random access (use file-based API for those)
|
|
206
|
+
* Central directory must fit in memory (usually small)
|
|
207
|
+
|
|
208
|
+
== See Also
|
|
209
|
+
|
|
210
|
+
* link:parallel-processing.html[Parallel Processing] - Combine with streaming for maximum performance
|
|
211
|
+
* link:progress-tracking.html[Progress Tracking] - Monitor streaming operations
|
|
212
|
+
* link:../../compatibility.html[Compatibility] - Streaming support across formats
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: GZIP Format
|
|
3
|
+
nav_order: 5
|
|
4
|
+
parent: Archive Formats
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
GZIP is the standard compression format on Unix/Linux systems for single files. It uses the Deflate algorithm and is widely supported across all platforms.
|
|
11
|
+
|
|
12
|
+
== Key Characteristics
|
|
13
|
+
|
|
14
|
+
[cols="1,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Property |Value
|
|
17
|
+
|
|
18
|
+
|Compression
|
|
19
|
+
|Deflate
|
|
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
|
|
29
|
+
|
|
30
|
+
|Best For
|
|
31
|
+
|Single file compression, web servers, Unix systems
|
|
32
|
+
|===
|
|
33
|
+
|
|
34
|
+
== Basic Usage
|
|
35
|
+
|
|
36
|
+
=== Compress a File
|
|
37
|
+
|
|
38
|
+
[source,ruby]
|
|
39
|
+
----
|
|
40
|
+
# Compress single file
|
|
41
|
+
Omnizip.compress_file('data.txt', 'data.txt.gz')
|
|
42
|
+
|
|
43
|
+
# With compression level
|
|
44
|
+
Omnizip.compress_file('data.txt', 'data.txt.gz',
|
|
45
|
+
level: 9 # Maximum compression
|
|
46
|
+
)
|
|
47
|
+
----
|
|
48
|
+
|
|
49
|
+
=== Decompress a File
|
|
50
|
+
|
|
51
|
+
[source,ruby]
|
|
52
|
+
----
|
|
53
|
+
# Decompress GZIP file
|
|
54
|
+
Omnizip.decompress_file('data.txt.gz', 'data.txt')
|
|
55
|
+
|
|
56
|
+
# Decompress to automatically named file
|
|
57
|
+
Omnizip.decompress_file('data.txt.gz') # Creates data.txt
|
|
58
|
+
----
|
|
59
|
+
|
|
60
|
+
== GZIP vs Other Formats
|
|
61
|
+
|
|
62
|
+
[cols="2,1,1,1"]
|
|
63
|
+
|===
|
|
64
|
+
|Feature |GZIP |XZ |ZIP
|
|
65
|
+
|
|
66
|
+
|Compression
|
|
67
|
+
|Good
|
|
68
|
+
|Excellent
|
|
69
|
+
|Good
|
|
70
|
+
|
|
71
|
+
|Speed
|
|
72
|
+
|Fast
|
|
73
|
+
|Slow
|
|
74
|
+
|Fast
|
|
75
|
+
|
|
76
|
+
|Archive Support
|
|
77
|
+
|No
|
|
78
|
+
|No
|
|
79
|
+
|Yes
|
|
80
|
+
|
|
81
|
+
|Unix Standard
|
|
82
|
+
|Yes
|
|
83
|
+
|Growing
|
|
84
|
+
|No
|
|
85
|
+
|===
|
|
86
|
+
|
|
87
|
+
== Streaming Compression
|
|
88
|
+
|
|
89
|
+
GZIP supports streaming for large files:
|
|
90
|
+
|
|
91
|
+
[source,ruby]
|
|
92
|
+
----
|
|
93
|
+
# Stream compress large file
|
|
94
|
+
File.open('large.bin', 'rb') do |input|
|
|
95
|
+
Omnizip::Gzip::Writer.open('large.bin.gz') do |output|
|
|
96
|
+
while chunk = input.read(65536)
|
|
97
|
+
output.write(chunk)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
----
|
|
102
|
+
|
|
103
|
+
== See Also
|
|
104
|
+
|
|
105
|
+
* link:tar-format.html[TAR Format] - Multi-file archives with GZIP
|
|
106
|
+
* link:xz-format.html[XZ Format] - Better compression alternative
|
|
107
|
+
* link:deflate.html[Deflate Algorithm] - Compression algorithm details
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Archive Formats
|
|
3
|
+
nav_order: 20
|
|
4
|
+
parent: Guides
|
|
5
|
+
has_children: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Archive Formats Overview
|
|
9
|
+
|
|
10
|
+
Omnizip supports 10 archive formats for different use cases. Each format has unique features, compression options, and compatibility characteristics.
|
|
11
|
+
|
|
12
|
+
== Format Comparison
|
|
13
|
+
|
|
14
|
+
[cols="1,1,1,2"]
|
|
15
|
+
|===
|
|
16
|
+
|Format |Compression |Encryption |Best For
|
|
17
|
+
|
|
18
|
+
|link:seven-zip-format.html[7z]
|
|
19
|
+
|Multiple (LZMA2, etc.)
|
|
20
|
+
|AES-256
|
|
21
|
+
|Software distribution, backups
|
|
22
|
+
|
|
23
|
+
|link:zip-format.html[ZIP]
|
|
24
|
+
|Deflate, PPMd
|
|
25
|
+
|AES (WinZip), Traditional
|
|
26
|
+
|Cross-platform compatibility
|
|
27
|
+
|
|
28
|
+
|link:rar-format.html[RAR]
|
|
29
|
+
|RAR (proprietary)
|
|
30
|
+
|AES-256
|
|
31
|
+
|Binary distribution, multi-volume
|
|
32
|
+
|
|
33
|
+
|link:tar-format.html[TAR]
|
|
34
|
+
|External (gzip, bzip2, xz)
|
|
35
|
+
|None
|
|
36
|
+
|Unix backups, software packaging
|
|
37
|
+
|
|
38
|
+
|link:gzip-format.html[GZIP]
|
|
39
|
+
|Deflate
|
|
40
|
+
|None
|
|
41
|
+
|Single file compression
|
|
42
|
+
|
|
43
|
+
|link:xz-format.html[XZ]
|
|
44
|
+
|LZMA2
|
|
45
|
+
|None
|
|
46
|
+
|System package compression
|
|
47
|
+
|===
|
|
48
|
+
|
|
49
|
+
== Choosing a Format
|
|
50
|
+
|
|
51
|
+
=== By Use Case
|
|
52
|
+
|
|
53
|
+
[cols="1,2"]
|
|
54
|
+
|===
|
|
55
|
+
|Use Case |Recommended Format
|
|
56
|
+
|
|
57
|
+
|Cross-platform distribution
|
|
58
|
+
|ZIP (universal compatibility)
|
|
59
|
+
|
|
60
|
+
|Maximum compression
|
|
61
|
+
|7z with LZMA2 (level 9)
|
|
62
|
+
|
|
63
|
+
|Large file splitting
|
|
64
|
+
|RAR (multi-volume support) or 7z
|
|
65
|
+
|
|
66
|
+
|Unix/Linux backups
|
|
67
|
+
|TAR with XZ or BZip2
|
|
68
|
+
|
|
69
|
+
|Single file compression
|
|
70
|
+
|GZIP or XZ
|
|
71
|
+
|
|
72
|
+
|Software packages
|
|
73
|
+
|7z or TAR.XZ
|
|
74
|
+
|===
|
|
75
|
+
|
|
76
|
+
=== By Compatibility
|
|
77
|
+
|
|
78
|
+
[cols="1,4"]
|
|
79
|
+
|===
|
|
80
|
+
|Platform |Best Format
|
|
81
|
+
|
|
82
|
+
|Windows
|
|
83
|
+
|ZIP (native), 7z (7-Zip), RAR (WinRAR)
|
|
84
|
+
|
|
85
|
+
|macOS
|
|
86
|
+
|ZIP (native), 7z, TAR.GZ
|
|
87
|
+
|
|
88
|
+
|Linux
|
|
89
|
+
|TAR.GZ, TAR.XZ, ZIP, 7z
|
|
90
|
+
|
|
91
|
+
|Universal
|
|
92
|
+
|ZIP (supported everywhere)
|
|
93
|
+
|===
|
|
94
|
+
|
|
95
|
+
== Format Features
|
|
96
|
+
|
|
97
|
+
=== 7z Format
|
|
98
|
+
|
|
99
|
+
* **Compression**: LZMA, LZMA2, BZip2, PPMd, Deflate, Zstandard
|
|
100
|
+
* **Encryption**: AES-256 with header encryption
|
|
101
|
+
* **Solid Archives**: Yes (better compression)
|
|
102
|
+
* **Multi-Volume**: Yes
|
|
103
|
+
* **Large Files**: Yes (up to 16 billion GB)
|
|
104
|
+
|
|
105
|
+
=== ZIP Format
|
|
106
|
+
|
|
107
|
+
* **Compression**: Deflate, Deflate64, PPMd, BZip2
|
|
108
|
+
* **Encryption**: AES-256 (WinZip), Traditional (weak)
|
|
109
|
+
* **ZIP64**: Yes (files >4GB)
|
|
110
|
+
* **Universal Support**: Yes
|
|
111
|
+
|
|
112
|
+
=== RAR Format
|
|
113
|
+
|
|
114
|
+
* **Compression**: Proprietary RAR algorithm
|
|
115
|
+
* **Encryption**: AES-256
|
|
116
|
+
* **Multi-Volume**: Excellent support
|
|
117
|
+
* **Recovery Records**: Error correction
|
|
118
|
+
|
|
119
|
+
=== TAR Format
|
|
120
|
+
|
|
121
|
+
* **Compression**: External (GZIP, BZip2, XZ)
|
|
122
|
+
* **Encryption**: None
|
|
123
|
+
* **POSIX**: Full support
|
|
124
|
+
* **Unix Standard**: Yes
|
|
125
|
+
|
|
126
|
+
== See Also
|
|
127
|
+
|
|
128
|
+
* link:../compression-algorithms/[Compression Algorithms] - Choose the right compression
|
|
129
|
+
* link:../../compatibility.html[Compatibility] - Detailed format support matrix
|
|
130
|
+
* link:../advanced-features/encryption.html[Encryption] - Secure your archives
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: RAR Format
|
|
3
|
+
nav_order: 3
|
|
4
|
+
parent: Archive Formats
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
RAR is a proprietary archive format known for its excellent compression ratio and robust multi-volume support. Omnizip provides full read support for RAR4 and RAR5 archives.
|
|
11
|
+
|
|
12
|
+
== Key Characteristics
|
|
13
|
+
|
|
14
|
+
[cols="1,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Property |Value
|
|
17
|
+
|
|
18
|
+
|Compression
|
|
19
|
+
|Proprietary RAR algorithm (excellent ratio)
|
|
20
|
+
|
|
21
|
+
|Encryption
|
|
22
|
+
|AES-256 (RAR5), AES-128 (RAR4)
|
|
23
|
+
|
|
24
|
+
|Multi-Volume
|
|
25
|
+
|Excellent support with recovery records
|
|
26
|
+
|
|
27
|
+
|Error Recovery
|
|
28
|
+
|Recovery records for damaged archives
|
|
29
|
+
|
|
30
|
+
|Best For
|
|
31
|
+
|Binary distribution, large archives, error-sensitive storage
|
|
32
|
+
|===
|
|
33
|
+
|
|
34
|
+
[IMPORTANT]
|
|
35
|
+
====
|
|
36
|
+
RAR compression is patented software. Omnizip can only **read** RAR archives, not create them. See link:../../RAR_WRITE_SUPPORT.html[RAR Write Support] for details.
|
|
37
|
+
====
|
|
38
|
+
|
|
39
|
+
== Reading RAR Archives
|
|
40
|
+
|
|
41
|
+
=== Basic Extraction
|
|
42
|
+
|
|
43
|
+
[source,ruby]
|
|
44
|
+
----
|
|
45
|
+
# Extract RAR archive
|
|
46
|
+
Omnizip.extract_archive('backup.rar', 'output/')
|
|
47
|
+
|
|
48
|
+
# List contents
|
|
49
|
+
archive = Omnizip::Archive.open('backup.rar')
|
|
50
|
+
archive.each_entry do |entry|
|
|
51
|
+
puts "#{entry.name} - #{entry.size} bytes"
|
|
52
|
+
end
|
|
53
|
+
----
|
|
54
|
+
|
|
55
|
+
=== Encrypted Archives
|
|
56
|
+
|
|
57
|
+
[source,ruby]
|
|
58
|
+
----
|
|
59
|
+
# Extract password-protected RAR
|
|
60
|
+
Omnizip.extract_archive('secure.rar', 'output/',
|
|
61
|
+
password: 'your-password'
|
|
62
|
+
)
|
|
63
|
+
----
|
|
64
|
+
|
|
65
|
+
=== Multi-Volume Archives
|
|
66
|
+
|
|
67
|
+
[source,ruby]
|
|
68
|
+
----
|
|
69
|
+
# Extract multi-volume RAR (part1.rar, part2.rar, ...)
|
|
70
|
+
Omnizip.extract_archive('archive.part1.rar', 'output/')
|
|
71
|
+
----
|
|
72
|
+
|
|
73
|
+
== RAR4 vs RAR5
|
|
74
|
+
|
|
75
|
+
[cols="2,1,1"]
|
|
76
|
+
|===
|
|
77
|
+
|Feature |RAR4 |RAR5
|
|
78
|
+
|
|
79
|
+
|Compression
|
|
80
|
+
|Good
|
|
81
|
+
|Excellent
|
|
82
|
+
|
|
83
|
+
|Encryption
|
|
84
|
+
|AES-128
|
|
85
|
+
|AES-256
|
|
86
|
+
|
|
87
|
+
|Dictionary Size
|
|
88
|
+
|4 MB
|
|
89
|
+
|Up to 1 GB
|
|
90
|
+
|
|
91
|
+
|Multi-Threading
|
|
92
|
+
|Limited
|
|
93
|
+
|Full support
|
|
94
|
+
|
|
95
|
+
|Recovery Records
|
|
96
|
+
|Yes
|
|
97
|
+
|Enhanced
|
|
98
|
+
|===
|
|
99
|
+
|
|
100
|
+
== See Also
|
|
101
|
+
|
|
102
|
+
* link:seven-zip-format.html[7z Format] - Alternative for creating archives
|
|
103
|
+
* link:zip-format.html[ZIP Format] - Universal compatibility
|
|
104
|
+
* link:../../RAR_WRITE_SUPPORT.html[RAR Write Support] - Licensing information
|