dmendel/bindata

GitHub: dmendel/bindata

BinData 是一个 Ruby 库,通过声明式的方式简化结构化二进制数据的读取与写入,替代繁琐的 pack/unpack 操作。

Stars: 638 | Forks: 57

# 什么是 BinData? [![Github CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/052bc9eaea1744e860f382f618f1146be38e27dfd499bb29c253bcd1827fad60.svg)](https://github.com/dmendel/bindata/actions/workflows/ci.yml) [![Version](https://img.shields.io/gem/v/bindata.svg)](https://rubygems.org/gems/bindata) [![Downloads](https://img.shields.io/gem/dt/bindata.svg)](https://rubygems.org/gems/bindata) [![Coverage](https://img.shields.io/coveralls/dmendel/bindata.svg)](https://coveralls.io/r/dmendel/bindata) 你是否发现自己写过这样的代码? ``` io = File.open(...) len = io.read(2).unpack("v") name = io.read(len) width, height = io.read(8).unpack("VV") puts "Rectangle #{name} is #{width} x #{height}" ``` 这很丑陋,违反了 DRY 原则,而且没有 Ruby 的风格。 有更好的方法。下面是使用 BinData 编写上述代码的方式。 ``` class Rectangle < BinData::Record endian :little uint16 :len string :name, :read_length => :len uint32 :width uint32 :height end io = File.open(...) r = Rectangle.read(io) puts "Rectangle #{r.name} is #{r.width} x #{r.height}" ``` BinData 提供了一种*声明式*的方法来读取和写入结构化的二进制数据。 这意味着程序员只需指定二进制数据的格式是*什么*, 然后 BinData 会处理*如何*读取和写入这种格式的数据。 它是 Ruby 的 `#pack` 和 `#unpack` 方法的一个更简单(也更易读)的替代方案。 BinData 让创建新的数据类型变得简单。它支持所有常见的 在结构化二进制数据格式中出现的原始数据类型。内置对依赖字段 和变长字段的支持。 # 安装 ``` $ gem install bindata ``` # 文档 [BinData 手册](http://github.com/dmendel/bindata/wiki)。 # 联系方式 如果您有任何疑问 / bug 报告 / 建议,请通过电子邮件 bindata@dmau.org 联系我 (Dion Mendel)
标签:Ruby, 二进制数据处理, 开发库, 数据序列化, 知识库, 结构化数据