{"id":18103125,"url":"https://github.com/dearblue/ruby-extlz4","last_synced_at":"2025-04-13T19:01:52.363Z","repository":{"id":56845277,"uuid":"84314410","full_name":"dearblue/ruby-extlz4","owner":"dearblue","description":"ruby bindings for lz4","archived":false,"fork":false,"pushed_at":"2023-06-19T12:42:37.000Z","size":298,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-25T10:22:24.613Z","etag":null,"topics":["lz4","ruby"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dearblue.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.ja.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-08T11:46:31.000Z","updated_at":"2024-06-21T14:18:21.364Z","dependencies_parsed_at":"2024-06-21T14:18:20.696Z","dependency_job_id":"98f65be0-f410-4dd0-be27-7294cf166751","html_url":"https://github.com/dearblue/ruby-extlz4","commit_stats":{"total_commits":110,"total_committers":3,"mean_commits":"36.666666666666664","dds":"0.23636363636363633","last_synced_commit":"cc0fa22d39fbe7fda927288267bc932a952a61cd"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dearblue%2Fruby-extlz4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dearblue%2Fruby-extlz4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dearblue%2Fruby-extlz4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dearblue%2Fruby-extlz4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dearblue","download_url":"https://codeload.github.com/dearblue/ruby-extlz4/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248766728,"owners_count":21158301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lz4","ruby"],"created_at":"2024-10-31T22:10:24.108Z","updated_at":"2025-04-13T19:01:52.341Z","avatar_url":"https://github.com/dearblue.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# extlz4 - LZ4 for ruby\n\n圧縮伸張ライブラリ [lz4 (https://github.com/lz4/lz4/)](https://github.com/lz4/lz4/) の非公式 ruby バインディングライブラリです。\n\nLZ4 データストリームを圧縮・伸張できます。lz4-cli で扱うことが出来ます。\n\n```shell:shell\n$ dmesg | ruby -r extlz4 -e 'LZ4.encode_file($stdin.binmode, $stdout.binmode)' | lz4c -d | more\n```\n\nほかの ruby 向けの lz4 バインディングライブラリとしては KOMIYA Atsushi さんによる [lz4-ruby (http://rubygems.org/gems/lz4-ruby)](http://rubygems.org/gems/lz4-ruby) があります。\n\n\n## FEATURES (機能)\n\n  * Generic LZ4 frame data process (for `.lz4` file format)\n      * Decode LZ4 Frame data : `LZ4.decode`\n      * Encode LZ4 Frame data : `LZ4.encode`\n  * Generic LZ4 frame data file process (for `.lz4` file format)\n      * Decode LZ4 Frame data file : `LZ4.decode_file`\n      * Encode LZ4 Frame data file : `LZ4.encode_file`\n  * LZ4 block data process\n      * Decode LZ4 block data : `LZ4.block_decode`\n      * Encode LZ4 block data : `LZ4.block_encode` (supporting high compression level)\n      * Streaming Decode LZ4 block data : `LZ4.block_stream_decode` and `LZ4::BlockDecoder#update`\n      * Streaming Encode LZ4 block data : `LZ4.block_stream_encode` and `LZ4::BlockEncoder#update` (supporting high compression level)\n\nSee [Quick reference](QUICKREF.md) for more details.\n\n\n## ATTENTIONS (注意事項)\n\n  * Many documents are written in japanese.\n\n    (ドキュメントの多くは日本語で記述されています)\n\n\n## extlz4-0.1 による不正な lz4 ストリームを出力する不具合について\n\nextlz4-0.1 に不正な lz4 ストリームを出力する不具合がありました。\n\n詳しく説明すると、ブロックデータとともに格納時ブロックデータサイズも出力しますが、常に圧縮後のデータサイズを出力していました。圧縮していない (圧縮後のデータサイズが圧縮前のデータサイズを上回った) 場合であれば、圧縮前のデータサイズを出力するべきところですが、そうはなっていません。\n\nこれによって無圧縮ブロックデータが正しく読み込めず、ひいてはそのブロック以降のデータが正しく読み込めないということになります。\n\nextlz4-0.1.1 でその不具合の修正を行いました。\n\nまた、不正な lz4 ストリームファイルを生成しなおかつオリジナルファイルも失われた場合は、同梱してある `bin/extlz4` プログラムに `--fix-extlz4-0.1-bug` を指定することで正しい lz4 ストリームファイルを出力できます。\n\n    extlz4 --fix-extlz4-0.1-bug \u003cfile\u003e...\n\n出力ファイル名は、入力ファイル名の頭に \"fixed-\" を追加したものとなります。\n\n必要であれば `-f` スイッチが利用できます。\n\n`-k` スイッチは無視されます。修復した lz4 ストリームファイルが正しいかを検査したあとで不正な lz4 ストリームファイルと差し替えて下さい。\n\n修復できるのはあくまで extlz4-0.1 のこの不具合に起因するファイルのみとなります。\n\n\n## EXAMPLES (用例)\n\nFirst, load extlz4. (最初に extlz4 を読み込んでください)\n\n``` ruby:ruby\nrequire \"extlz4\"\n```\n\n### One shot decoding from LZ4 Frame (LZ4 Frame 伸張処理)\n\n``` ruby:ruby\nuncompressed_data_string = LZ4.decode(compressed_data_string)\n```\n\n### One shot encoding to LZ4 Frame (LZ4 Frame 通常圧縮処理)\n\n``` ruby:ruby\ncompressed_data_string = LZ4.encode(uncompressed_data_string)\n```\n\n### One shot high compression encoding to LZ4 Frame (LZ4 Frame 高圧縮処理)\n\n``` ruby:ruby\ncompressed_data_string = LZ4.encode(uncompressed_data_string, 9)\n```\n\n### Stream decoding to LZ4 Frame\n\n``` ruby:ruby\nFile.open(\"sample.txt.lz4\", \"rb\") do |file|\n  LZ4.decode(file) do |lz4|\n    lz4.read(50)  # read 50 bytes as string\n    lz4.getc      # read 1 byte as integer\n    lz4.read      # read rest bytes as string\n  end\nend\n```\n\n### Stream encoding by high compression to LZ4 Frame\n\n``` ruby:ruby\nFile.open(\"sample.txt.lz4\", \"wb\") do |file|\n  LZ4.encode(file, 9) do |lz4|\n    lz4 \u003c\u003c \"#{Time.now}: abcdefghijklmnopqrstuvwxyz\\n\"\n    lz4.write \"#{Time.now}: abcdefghijklmnopqrstuvwxyz\\n\"\n  end\nend\n```\n\n### Stream encoding without block to LZ4 Frame\n\n``` ruby:ruby\nfile = File.open(\"sample.txt.lz4\", \"wb\")\nlz4 = LZ4.encode(file)\nlz4 \u003c\u003c \"abcdefghijklmnopqrstuvwxyz\\n\"\nlz4.close  # VERY IMPORTANT!\n```\n\n### One shot block data processing to/from LZ4 Block (fast compression encoding and decoding)\n\n``` ruby:ruby\nsrc = \"abcdefg\" * 100\nlz4data = LZ4.block_encode(src)\ndata = LZ4.block_decode(lz4data)\np src == data  # =\u003e true\n```\n\n### One shot block data processing to/from LZ4 Block (high compression encoding and decoding)\n\n``` ruby:ruby\nsrc = \"abcdefg\" * 100\nlevel = 8\nlz4data = LZ4.block_encode(level, src)\ndata = LZ4.block_decode(lz4data)\np src == data  # =\u003e true\n```\n\n### One shot block data processing to/from LZ4 Block (high speed encoding)\n\n``` ruby:ruby\nsrc = \"abcdefg\" * 100\nlevel = -19 # transform to one's complement as acceleration\nlz4data = LZ4.block_encode(level, src)\n```\n\n### Block stream data processing to/from LZ4 Block (high compression encoding and decoding)\n\n``` ruby:ruby\nlevel = 8 # (OPTIONAL PARAMETER)\npredict = \"abcdefg\" # with preset dictionary (OPTIONAL PARAMETER)\nencoder = LZ4.block_stream_encode(level, predict)\n\nsrc = \"abcdefg\" * 100\nlz4data1 = encoder.update(src)\n\ndecoder = LZ4.block_stream_decode(predict)\n\ndata = decoder.update(lz4data1)\np src == data  # =\u003e true\n\nsrc2 = \"ABCDEFG\" * 100\nlz4data2 = encoder.update(src2)\np \"lz4data1.bytesize\" =\u003e lz4data1.bytesize,\n  \"lz4data2.bytesize\" =\u003e lz4data2.bytesize\n\ndata = decoder.update(lz4data2)\np src2 == data  # =\u003e true\n```\n\n\n## Support `Ractor` with Ruby3\n\nRuby3 で追加された `Ractor` に対応しています。\n\n\n## BONUS (おまけ)\n\nコマンドラインプログラムとして ``extlz4`` が追加されます。\n\nこれは lz4 と同程度の機能を持ちます (車輪の再発明とも言う)。\n\nとはいえ、引数のとり方を変えてあり、gzip のような形で利用できます。\n\n\n## SPECIFICATION (仕様)\n\n  - package name: extlz4\n  - author: dearblue (mailto:dearblue@users.osdn.me)\n  - project page: \u003chttps://github.com/dearblue/ruby-extlz4\u003e\n  - how to install: `gem install extlz4`\n  - version: 0.3.4\n  - product quality: technical preview\n  - licensing: [2 clause BSD License](LICENSE)\n  - dependency gems: none\n  - dependency external c libraries: none\n  - bundled external c libraries (git submodules):\n      - [lz4](https://github.com/lz4/lz4)\n        [version 1.9.3](https://github.com/lz4/lz4/tree/v1.9.3)\n        under [2 clause BSD license](https://github.com/lz4/lz4/blob/v1.9.3/LICENSE)\n        by [Yann Collet](https://github.com/Cyan4973)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdearblue%2Fruby-extlz4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdearblue%2Fruby-extlz4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdearblue%2Fruby-extlz4/lists"}