传递给编解码器的“解码”方法的“数据”对象是什么?
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
类型的对象,允许我在数据可用时读取数据,但我不确定。
问题:
data
对象是什么类型?它有哪些方法?
- 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
,它被用作任意字节的缓冲区。我已经通过创建框架插件并在运行时检查值来验证这一点。
这似乎需要注意:提供给您的 codec
的 decode
方法的字节不能保证是一个完整的事件。
我想写一个 Codec
插件来使 LogStash 解码二进制数据格式。
The official documentation for writing a Codec
表明我需要定义一个接受单个参数的 decode
方法:一个名为 data
的变量。
我是 LogStash 和 Ruby 的新手。由于主要使用静态类型语言,我不确定如何了解有关 data
变量的更多信息。我认为它类似于 InputStream
类型的对象,允许我在数据可用时读取数据,但我不确定。
问题:
data
对象是什么类型?它有哪些方法?- 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
,它被用作任意字节的缓冲区。我已经通过创建框架插件并在运行时检查值来验证这一点。
这似乎需要注意:提供给您的 codec
的 decode
方法的字节不能保证是一个完整的事件。