Reading binary data

Ty Young youngty1997 at gmail.com
Thu Oct 31 02:20:51 UTC 2019


On 10/30/19 4:22 PM, Maurizio Cimadamore wrote:
>
> On 30/10/2019 20:06, Ty Young wrote:
>>
>> On 10/30/19 9:56 AM, Maurizio Cimadamore wrote:
>>>
>>> On 30/10/2019 13:47, Ty Young wrote:
>>>> I've stumbled across a function that returns a pointer to memory 
>>>> which contains data(AKA binary data) and a size for it. I'm 
>>>> assuming(correct me if I'm wrong here) that accessing this data 
>>>> requires use of lower level foreign memory API however the API 
>>>> seems to have changed since the presentation given a few months 
>>>> back. What is the correct way currently for accessing this data?
>>>>
>>>>
>>>>
>>> Hi,
>>> I don't think the API has changed much - here's the javadoc (since 
>>> then we added support for mapped segments and for concurrency, but 
>>> the bulk of the API is the same).
>>>
>>> http://cr.openjdk.java.net/~mcimadamore/panama/memaccess_javadoc/
>>
>>
>> Seems like the build i'm using doesn't have the lower level memory 
>> access API. I'm using the 2019 JDK build. Are there pre-built JDKs 
>> available or is compiling from source required?
> At the moment we don't have prebuilt binaries with the low level API.
>>
>>
>>>
>>> To help you with your use case I'd need first to understand how you 
>>> are going to call that function - is it a native function (I 
>>> assume)? Are you calling such function using the Panama foreign API, 
>>> or the stuff in foreign-abi?
>>
>>
>> Yes, native. Just using foreign Pointer API.
>
> Well, if you are using the Pointer API, you could in principle read 
> binary data with that too?


Yes, my bad. I had read the documentation and instantly assumed that I 
needed to take the Pointer(technically Pointer<Pointer<Byte>>) and use 
it with lower level APIs without considering that Pointer already 
supports what I need. Apologies.


>
> E.g. you can cast a Pointer<?> to a pointer of the right type using 
> the cast() method and then work it from here - e.g.
>
> Pointer<?> buffer = ...
> Pointer<Integer> intPointer = buffer.cast(NativeTypes.INT);
> for (int i = 0 ; i < size ; i++) {
>    int x = intPointer.offset(i).get();
> }


Yes, this works as does Pointer.withSize().


>
> Maurizio
>
>>
>>
>>>
>>> Maurizio
>>>
>>>


More information about the panama-dev mailing list