python jpype получить значение из экземпляра класса java - PullRequest
0 голосов
/ 06 января 2020

У меня есть код вроде

message = "abc".encode()
messageDigest = java.security.MessageDigest.getInstance("SHA-256")
messageDigest.update(message)
hashdata = messageDigest.digest()

Здесь, когда я печатаю hashdata, я получаю <<java class 'byte[]'> at 0x7f1ee005df60>

Но мне нужно его значение. Как я могу получить его значение?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

В настоящее время мы не поддерживаем оператор __bytes__ для массива байтов Java, но его легко добавить с помощью настройщика.

import jpype
from jpype import java

# Add the customizer before starting the JVM
@jpype.JImplementationFor('byte[]')
class ByteConverter(object):
    def __bytes__(self):
        return bytes(self[:])

# Now start the JVM
jpype.startJVM(convertStrings=False)

# Perform Java operations
message = "abc".encode()
messageDigest = java.security.MessageDigest.getInstance("SHA-256")
messageDigest.update(message)
hashdata = messageDigest.digest()

# We got back a Java byte[] and we would like a Python bytes
print(bytes(hashdata))
0 голосов
/ 06 января 2020

Попробуйте это

for (int i = 0; i < hash.length; i++) {
    if ((0xff & hash[i]) < 0x10) {
        hexString.append("0"
                + Integer.toHexString((0xFF & hash[i])));
    } else {
        hexString.append(Integer.toHexString(0xFF & hash[i]));
    }
}
...