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

时间:2014-02-10 20:42:34

标签: 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)
???

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

1 个答案:

答案 0 :(得分:4)

弄清楚自己:

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)

缓冲区具有生成的avro序列化字节。

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