dmendel/bindata
GitHub: dmendel/bindata
BinData 是一个 Ruby 库,通过声明式的方式简化结构化二进制数据的读取与写入,替代繁琐的 pack/unpack 操作。
Stars: 638 | Forks: 57
# 什么是 BinData?
[](https://github.com/dmendel/bindata/actions/workflows/ci.yml)
[](https://rubygems.org/gems/bindata)
[](https://rubygems.org/gems/bindata)
[](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, 二进制数据处理, 开发库, 数据序列化, 知识库, 结构化数据