Hi Hannes,

Thanks for the tip, knowing that the convention isn't possible as is, are there 
any alternatives to get the JVM buffer that backs a typed array?

I wanted to perform some work on a given buffer and then pass it to the JVM for 
further processing. Having to copy the buffer byte by byte will introduce a 
penalty that kind of defeats the whole purpose of using typed arrays to start 
with. 


Paulo Lopes
Principal Software Engineer


  Original Message  
From: hannes.wallnoe...@oracle.com
Sent: October 12, 2018 10:10 AM
To: pmart...@redhat.com
Cc: nashorn-dev@openjdk.java.net
Subject: Re: casting typed array to java byte[] is it possible?

Hi Paulo,

Java.to() would be the way to go, but as you found out it does not support 
typed arrays.

What works is to convert the typed array to an ordinary JS array and convert to 
byte[] from there:

  Java.to(Array.prototype.slice.call(arr), 'byte[]‘);

That’s obviously not very elegant nor efficient, but it’s the only workaround I 
can think of.

Hannes


> Am 11.10.2018 um 20:21 schrieb Paulo Lopes <pmart...@redhat.com>:
> 
> Hi,
> 
> I'm trying to handle a case where a Uint8Array is being passed to a
> method, that has the signature:
> 
> String encode(byte[]);
> 
> Sadly nashorn fails with:
> 
> java.lang.ClassCastException: Cannot cast
> jdk.nashorn.internal.objects.NativeUint8Array to [B
> 
> And trying to help the cast with:
> 
> javaObj.encode(Java.to(arr, 'byte[]'));
> 
> Does not help either. The documentation on typed arrays is quite scarce
> so I cannot see how to handle this, does anyone have a clue?
> 
> Thanks!
> Paulo
> 

Reply via email to