【问题标题】:Faster/more efficient alternatives to Ruby's Marshal?比 Ruby 的 Marshal 更快/更高效的替代品?
【发布时间】:2010-06-22 18:49:16
【问题描述】:

我正在寻找 Ruby 的 Marshal 功能的直接替代品,希望它比 Marshal 具有以下一个或多个优势:

  • 更快的序列化/反序列化
  • 更简洁(或更简单)的对象图

谢谢!!

【问题讨论】:

  • 请确保您不会像我在对已接受答案的评论中所说的那样对 Marshal 进行修补。 @Adrian 的答案很棒,但只能单独使用 #to_msgpackMessagePack::unpack。否则,您将破坏不同的 Marshal“真实”功能。 MsgPack 适用于 Array、Hash、String 等泛型类型。但 Marshal 适用于 Ruby 中的任何内容,绝对适用于所有内容。我不认为有一个“直接”的替代品。根据您要打包的物品,您有责任知道使用哪一个。

标签: ruby algorithm marshalling unmarshalling minimization


【解决方案1】:

不幸的是,这不能作为替代品,因为 Marshall 会自动处理复杂类型。看起来 msgpack 将需要构建额外的功能(如 Marshal 的内部)将迭代定义相关对象的 Ruby 结构。

【讨论】:

  • 是的,msgpack 也只是将符号转换为字符串。不过,这个问题主要是要求一个快速的库。
【解决方案2】:

Msgpack 专注于所有这些。替换元帅:

require 'msgpack'

module Marshal
  module_function
  def dump(x)
    x.to_msgpack
  end
  def load(x)
    MessagePack.unpack x
  end
  alias restore load
end

http://msgpack.sourceforge.net/

【讨论】:

  • 这个想法很棒,msgpack 是一个不错的选择,但我不明白你为什么举一个猴子修补 Marshal 的例子,而不是打包和解包的 2 种方法。 Marshal 没有解决同样的问题。例如,您可以编组对象。 Marshal 还区分了字符串和符号。通过猴子补丁,您基本上是在破坏元帅。最好像使用 JSON 一样使用 msgpack。
猜你喜欢
  • 2019-08-19
  • 1970-01-01
  • 2013-09-05
  • 2020-06-03
  • 2021-09-03
  • 2016-02-06
  • 2012-05-25
  • 2012-03-21
  • 2022-10-07
相关资源
最近更新 更多