我可以序列化ruby Digest :: SHA1实例对象吗?

G’day人,

我正在使用redis作为后备存储在ruby(sinatra)中重新实现现有的自定义文件上载服务。

客户端计算SHA1哈希并启动上载上传最大64K块直到完成

服务器将块附加到文件计算完整文件的SHA1哈希以validation正确的接收

现在,我希望做的是在每个块上使用ruby(1.9.3)Digest :: SHA1 < 1GB]。

不幸的是Digest :: SHA1和Marshal.dump不兼容

1.9.3p125 :001 > require 'digest' => true 1.9.3p125 :002 > $digest = Digest::SHA1.new => # 1.9.3p125 :003 > marshalled_digest = Marshal.dump($digest) TypeError: no _dump_data is defined for class Digest::SHA1 from (irb):3:in `dump' from (irb):3 from /Users/rhodry/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `' 1.9.3p125 :004 > 

有没有人对如何:

  1. 获取对底层内存的访问权限(在C中操作)并存储/恢复这样的对象?
  2. 获得一个允许类似用例的替代实现?

谢谢,

parameme

更新: 要点:2280705使用ruby FFI实现选项1 – 希望它对其他人有用

您是否考虑过并且能够发送64k块的SHA1? 会有更多的校验和数据,但你会知道出了什么问题,并且不需要存储摘要的内部状态。