为什么我不能在MessageDigest实例上调用.update

时间:2010-05-16 19:38:56

标签: java clojure hashcode

当我从repl运行时:

(def md (MessageDigest/getInstance "SHA-1"))
(. md update (into-array [(byte 1)  (byte 2)  (byte 3)]))

我明白了:

No matching method found: update for class java.security.MessageDigest$Delegate

MessageDigest的Java 6文档显示:

update(byte[] input) 
      Updates the digest using the specified array of bytes.

(class (into-array [(byte 1) (byte 2) (byte 3)]))的类是 [Ljava.lang.Byte;

我在更新的定义中遗漏了什么?
不是创造我认为我的班级? 没有传递它我认为我的类型?

2 个答案:

答案 0 :(得分:3)

因为您正在调用MessageDigest中未定义的update(Byte [])。您需要将其转换为原始数组。

你可以这样做,

 (defn updateBytes [#^MessageDigest md, #^bytes data] 
      (.update md data)) 

答案 1 :(得分:2)

尝试:

(. md update (into-array Byte/TYPE [(byte 1) (byte 2) (byte 3)]))