Hi,
ich bin grade dabei für mein Projekt[1], ein evolutionärer Datenspeicher (XML und JSON in einem binary encoding momentan) ein memory mapped file backend zu schreiben, was die neue Foreign Memory API in Java 14 nutzt (Preview Feature / Incubating).
Im Prinzip wollte ich zwei bestehende Klassen, die ein simples RandomAccessFile nutzen mehr oder weniger erstmal 1:1 umschreiben:
https://github.com/sirixdb/sirix/bl...c/main/java/org/sirix/io/file/FileReader.java
https://github.com/sirixdb/sirix/bl...x/io/memorymapped/MemoryMappedFileReader.java
und
https://github.com/sirixdb/sirix/bl...c/main/java/org/sirix/io/file/FileWriter.java
https://github.com/sirixdb/sirix/bl...x/io/memorymapped/MemoryMappedFileWriter.java
Leider bekomme ich gleich schon eine Exception:
java.lang.IllegalArgumentException: Requested bytes size must be > 0.
at jdk.incubator.foreign/jdk.internal.foreign.Utils.makeMappedSegment(Utils.java:140)
at jdk.incubator.foreign/jdk.incubator.foreign.MemorySegment.mapFromPath(MemorySegment.java:398)
at org.sirix.io.memorymapped.MemoryMappedFileWriter.<init>(MemoryMappedFileWriter.java:83)
at org.sirix.io.memorymapped.MemoryMappedStorage.createWriter(MemoryMappedStorage.java:100)
Weil das File ja anfangs leer ist und man wohl kein leeres File mappen darf. Ich will aber eigentlich auch kein dummy Byte reinschreiben, dann wäre die ganze andere Logik eventuell falsch, bzw. ich müsste das erst wieder löschen, was irgendwie super hässlich wäre.
Kennt sich eventuell schon jemand mit der API aus oder hat ne tolle Idee?
Beste Grüße
Johannes
[1] https://sirix.io
ich bin grade dabei für mein Projekt[1], ein evolutionärer Datenspeicher (XML und JSON in einem binary encoding momentan) ein memory mapped file backend zu schreiben, was die neue Foreign Memory API in Java 14 nutzt (Preview Feature / Incubating).
Im Prinzip wollte ich zwei bestehende Klassen, die ein simples RandomAccessFile nutzen mehr oder weniger erstmal 1:1 umschreiben:
https://github.com/sirixdb/sirix/bl...c/main/java/org/sirix/io/file/FileReader.java
https://github.com/sirixdb/sirix/bl...x/io/memorymapped/MemoryMappedFileReader.java
und
https://github.com/sirixdb/sirix/bl...c/main/java/org/sirix/io/file/FileWriter.java
https://github.com/sirixdb/sirix/bl...x/io/memorymapped/MemoryMappedFileWriter.java
Leider bekomme ich gleich schon eine Exception:
java.lang.IllegalArgumentException: Requested bytes size must be > 0.
at jdk.incubator.foreign/jdk.internal.foreign.Utils.makeMappedSegment(Utils.java:140)
at jdk.incubator.foreign/jdk.incubator.foreign.MemorySegment.mapFromPath(MemorySegment.java:398)
at org.sirix.io.memorymapped.MemoryMappedFileWriter.<init>(MemoryMappedFileWriter.java:83)
at org.sirix.io.memorymapped.MemoryMappedStorage.createWriter(MemoryMappedStorage.java:100)
Weil das File ja anfangs leer ist und man wohl kein leeres File mappen darf. Ich will aber eigentlich auch kein dummy Byte reinschreiben, dann wäre die ganze andere Logik eventuell falsch, bzw. ich müsste das erst wieder löschen, was irgendwie super hässlich wäre.
Kennt sich eventuell schon jemand mit der API aus oder hat ne tolle Idee?
Beste Grüße
Johannes
[1] https://sirix.io