Mapped Memory Segment / Read from an existing file written via FileChannel or RandomAccessFile

Duncan Gittins duncan.gittins at gmail.com
Fri Apr 1 14:43:35 UTC 2022


got me...

On Fri, 1 Apr 2022 at 15:42, Duncan Gittins <duncan.gittins at gmail.com>
wrote:

> RAF.writeLong puts long as eight bytes, high byte first so would be
> consistent with readLong on any JVM. To read back via memory segment try
> adding withOrder big endian
>
>           final var longVal =
> memorySegment.get(ValueLayout.JAVA_LONG.withOrder(ByteOrder.BIG_ENDIAN), 0);
>
> Kind regards
>
> Duncan
>
>
> On Fri, 1 Apr 2022 at 00:29, Johannes Lichtenberger <
> lichtenberger.johannes at gmail.com> wrote:
>
>> Hello,
>>
>> I'm currently not sure what I'm doing wrong, but the following test is not
>> working. Maybe it's too late, but I'm not sure if I'll have an immediate
>> idea tomorrow, so I guess it's best to ask for help :-)
>>
>> kind regards
>> Johannes
>>
>> import jdk.incubator.foreign.MemorySegment;
>> import jdk.incubator.foreign.ResourceScope;
>> import jdk.incubator.foreign.ValueLayout;
>> import org.junit.jupiter.api.AfterEach;
>> import org.junit.jupiter.api.BeforeEach;
>>
>> import java.io.IOException;
>> import java.io.RandomAccessFile;
>> import java.nio.channels.FileChannel;
>> import java.nio.file.Files;
>> import java.nio.file.Path;
>> import java.nio.file.Paths;
>>
>> import static org.junit.jupiter.api.Assertions.assertEquals;
>>
>> public class TestFileChannelWithMemorySegment {
>>
>>   private Path tempFile;
>>
>>   @BeforeEach
>>   public void setup() {
>>     tempFile = Paths.get(System.getProperty("java.io.tmpdir"),
>> "test.bin");
>>   }
>>
>>   @AfterEach
>>   public void tearDown() throws IOException {
>>     Files.delete(tempFile);
>>   }
>>
>>   @org.junit.jupiter.api.Test
>>   public void test() throws IOException {
>> //    try (final FileChannel fileChannel = FileChannel.open(tempFile,
>> //
>> StandardOpenOption.CREATE_NEW,
>> //
>> StandardOpenOption.WRITE)) {
>> //      final ByteBuffer byteBuffer = ByteBuffer.allocate(8);
>> //      byteBuffer.putLong(11);
>> //      byteBuffer.position(0);
>> //
>> //      fileChannel.write(byteBuffer);
>> //      fileChannel.force(true);
>> //    }
>>
>>     try (final RandomAccessFile randomAccessFile = new
>> RandomAccessFile(tempFile.toFile(), "rw")) {
>>       randomAccessFile.writeLong(11);
>>     }
>>
>>     try (final ResourceScope resourceScope =
>> ResourceScope.newSharedScope()) {
>>       final MemorySegment memorySegment =
>>           MemorySegment.mapFile(tempFile, 0, Files.size(tempFile),
>> FileChannel.MapMode.READ_ONLY, resourceScope);
>>
>>       final var longVal = memorySegment.get(ValueLayout.JAVA_LONG, 0);
>>       assertEquals(11, longVal);
>>     }
>>   }
>> }
>>
>


More information about the panama-dev mailing list