Ruby 中的 Avro 序列化 - 如何写入字符串/缓冲区而不是文件

cyb*_*bis 6 ruby serialization avro

我正在尝试在 Ruby 中进行 avro 序列化。我已经编写了 JSON 模式,但是我喜欢将序列化数据作为 Ruby 中的字节而不是写入文件。

我的代码挂了类似的东西:

SCHEMA = {
           "type": "record",
           "name": "User",
           "fields" :
             [
               {"name": "name", "type": "string"},
               {"name": "id", "type": "long"},
               {"name": "city", "type": "string"}
             ]
         }.to_json

schema = Avro::Schema.parse(SCHEMA)
dw = Avro::IO::DatumWriter.new(schema)
buffer = StringIO.new
encoder = Avro::IO::BinaryEncoder.new(buffer)
???
Run Code Online (Sandbox Code Playgroud)

我有 name、id 和 city 的值,想知道如何创建 User 对象并将其序列化到字符串/字节缓冲区中。

cyb*_*bis 7

我自己想通了:

schema = Avro::Schema.parse(SCHEMA)
dw = Avro::IO::DatumWriter.new(schema)
buffer = StringIO.new
encoder = Avro::IO::BinaryEncoder.new(buffer)
datum = Hash["name" =>name, "id" => id, "city" => city]
dw.write(datum, encoder)
Run Code Online (Sandbox Code Playgroud)

buffer 具有生成的 avro 序列化字节。

看起来 Ruby 中还没有 Avro 客户端代码生成功能。我们必须将数据作为 Ruby 哈希值传递,就像我在数据字段中所做的那样。