Hi Sundar,
Yes indeed that helps and it really gets close to my needs, I notice
however, if I do that, then:
var ia = new Int8Array(ab)
ia.length
will never have a valid value, it will be zero regardless of the
underlying ArrayBuffer, since the property is read only I cannot assign
it myself (since I know the size at construction time) either.
Trying to specify the size:
var bb = java.nio.ByteBuffer.allocateDirect(12)
var ab = new ArrayBuffer(bb)
var ia = new Int8Array(ab, 0, 12)
it's all 8 bit ints so (bytes) fails with:
java.lang.RuntimeException: byteOffset + byteLength out of range,
byteOffset=0, elementLength=12, bytesPerElement=1
Is this expected? Or can I specify the length somewhere?
Also ab.byteLength prints 0 instead of 12...
Post by Sundararajan AthijegannathanHi Paulo Lopes,
ArrayBuffer can be created using a nio ByteBuffer.
// you could create a ByteBuffer in Java & pass
var bb = java.nio.ByteBuffer.allocateDirect(100)
// create JS ArrayBuffer backed by Java ByteBuffer instance
var ab = new ArrayBuffer(bb)
var ia = new Int8Array(ab)
ia[0] = 10
print(bb.get(0))
Hope this helps,
-Sundar
Post by Paulo LopesHi 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
Sent: October 12, 2018 10:10 AM
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
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
Post by Paulo LopesHi,
I'm trying to handle a case where a Uint8Array is being passed to a
String encode(byte[]);
java.lang.ClassCastException: Cannot cast
jdk.nashorn.internal.objects.NativeUint8Array to [B
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