2
G'day people,我可以序列化ruby Digest :: SHA1實例對象嗎?
我正在使用redis作爲後備存儲在ruby(sinatra)中重新實現一個現有的自定義文件上傳服務。
客戶 計算SHA1哈希值,並啓動上傳 上傳最大64K塊直到完成
服務器 追加塊到文件 計算完整文件的SHA1哈希來驗證正確接收
現在,我我希望做的是在每個塊上使用ruby(1.9.3)Digest :: SHA1 < <(更新)運算符(而不必從頭開始讀取整個文件)。 [大文件> 1GB]。
不幸摘要:: SHA1和Marshal.dump不兼容
1.9.3p125 :001 > require 'digest'
=> true
1.9.3p125 :002 > $digest = Digest::SHA1.new
=> #<Digest::SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709>
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 `<main>'
1.9.3p125 :004 >
有沒有人有任何想法如何:
- 獲取訪問底層內存(操縱在C)並存儲/恢復這樣的對象?
- 獲取可以允許類似用例的替代實現?
感謝,
parameme
更新:gist:2280705使用Ruby FFI實現選項1 - 希望這是對別人有用
約書亞 - 好思想,是的,我們正在考慮每塊散列,並且上傳協議的修訂版本在我們的路線圖上。不幸的是,我們有大量的低級客戶端安裝(大約5000個左右),所以我們上面的思想泡泡是一個次要的服務器端性能特徵,而我們共同收集了一個全新的客戶端版本。感謝您的反饋意見 ! parameme – parameme 2012-03-29 04:24:42