传递给编解码器的“解码”方法的“数据”对象是什么?

What is the `data` object passed to a Codec's `decode` method?

我想写一个 Codec 插件来使 LogStash 解码二进制数据格式。

The official documentation for writing a Codec 表明我需要定义一个接受单个参数的 decode 方法:一个名为 data 的变量。

我是 LogStash 和 Ruby 的新手。由于主要使用静态类型语言,我不确定如何了解有关 data 变量的更多信息。我认为它类似于 InputStream 类型的对象,允许我在数据可用时读取数据,但我不确定。

问题:

  1. data 对象是什么类型?它有哪些方法?
  2. Ruby 开发人员通常如何着手研究这样的变量?我不确定在不编写框架插件并将 data 的字符串表示形式转储到 STDOUT 的情况下,我是否找到了解决问题的方法。

谢谢!

编写 input 插件的文档对此有所提示。来自 run() method section:

    data = $stdin.sysread(16384)
    @codec.decode(data) do |event|
      decorate(event)
      event.set("host", @host) if !event.include?("host")
      queue << event
    end

data变量是一个RubyString,它被用作任意字节的缓冲区。我已经通过创建框架插件并在运行时检查值来验证这一点。

这似乎需要注意:提供给您的 codecdecode 方法的字节不能保证是一个完整的事件。