varad
varad

Reputation: 8029

python jpype get value from instance of java class

I have a code like

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

Here whhen I print hashdata I get <<java class 'byte[]'> at 0x7f1ee005df60>

But I need its value. How can I get its value ?

Upvotes: 0

Views: 775

Answers (2)

Karl Nelson
Karl Nelson

Reputation: 356

Currently we do not support the __bytes__ operator for a Java byte array, but it is easy to add with a customizer.

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))

Upvotes: 1

Raunak Shamnani
Raunak Shamnani

Reputation: 81

Try this

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]));
    }
}

Upvotes: 0

Related Questions