복붙노트

[REDIS] 나는 루비 다이제스트 :: SHA1 인스턴스 객체를 직렬화 할 수 있나요?

REDIS

나는 루비 다이제스트 :: SHA1 인스턴스 객체를 직렬화 할 수 있나요?

G'day 사람들,

나는 백업 저장소로 레디 스 루비 (시나)의 존재 사용자 정의 파일 업로드 서비스를 재 구현하고있다.

고객  SHA1 해시를 계산하고, 업로드를 개시  완성까지 최대 64K 덩어리를 업로드

섬기는 사람  파일 청크를 추가  전체 파일의 계산 SHA1 해시는 정확한 수신을 확인합니다

자, 내가 뭘 바라고하는 것은 사용 루비 (1.9.3) (오히려 말에 처음부터 전체 파일을 읽는 것보다) 각 청크에 대한 다이제스트 :: SHA1 << (갱신) 연산자이다. 【큰 파일> 1기가바이트].

불행하게도 다이제스트 :: 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 > 

사람이 방법에 어떤 아이디어가 있습니까 :

감사,

Prmme

업데이트 : 요점 : 2,280,705 구현 옵션 1 루비 FFI를 사용하여 - 희망은 다른 사람에게 유용합니다

해결법

  1. ==============================

    1.당신이 생각 당신은 SHA1의 경우 64K 청크를 보낼 수 있나요? 이 더 체크섬 데이터가 될 것입니다,하지만 일이 잘못 어디로 갔는지 당신이 알고있는 것, 그리고 소화의 내부 상태를 저장 할 필요가 없을 것이다.

    당신이 생각 당신은 SHA1의 경우 64K 청크를 보낼 수 있나요? 이 더 체크섬 데이터가 될 것입니다,하지만 일이 잘못 어디로 갔는지 당신이 알고있는 것, 그리고 소화의 내부 상태를 저장 할 필요가 없을 것이다.

  2. from https://stackoverflow.com/questions/9883649/can-i-serialize-a-ruby-digestsha1-instance-object by cc-by-sa and MIT license