Я пытаюсь использовать класс дайджеста сообщений Java для вычисления хеша md5 для большого количества файлов внутри моего приложения rails. Я написал некоторый код в сценарии ruby с JRuby, но вызов Files.readAllBytes () дает мне «неопределенный метод getFileSystem для #». Вот метод, который я написал в ruby:
def calculate_md5_java(zip)
require 'java'
import java.security.MessageDigest
import java.nio.file.Files
import javax.xml.bind.DatatypeConverter
import java.nio.file.FileSystems
md = MessageDigest.getInstance("MD5")
FileUtils.cp(zip, "GODPLEASELETTHISWORK.zip")
Zip::File.open("GODPLEASELETTHISWORK.zip") do |z|
z.each do |entry|
md.update(Files.readAllBytes(entry.get_input_stream))
end
end
digest = md.digest()
DatatypeConverter.printHexBinary(digest).toLowerCase()
end
Я также пытался изменить свой аргумент на
md.update(entry.get_input_stream.read.bytes.to_a)
Что дает мне:
no method 'update' for arguments (org.jruby.RubyArray) on Java::JavaSecurity::MessageDigest::Delegate available overloads: (byte) (java.nio.ByteBuffer) (byte[])