163. Streaming memory segments
Combining the Java Stream API with memory segments can be achieved via the elements(MemoryLayout elementLayout)
method. This method gets an element layout and returns a Stream<MemorySegment>
, which is a sequential stream over disjointed slices in this segment. The stream size matches the size of the specified layout.
Let’s consider the following memory layout:
SequenceLayout xy = MemoryLayout
.sequenceLayout(2, MemoryLayout.structLayout(
ValueLayout.JAVA_INT.withName("x"),
ValueLayout.JAVA_INT.withName("y")));
Next, we declare two VarHandle
and set some data:
VarHandle xHandle = xy.varHandle(
PathElement.sequenceElement(),
PathElement.groupElement("x"));
VarHandle yHandle = xy.varHandle(
PathElement.sequenceElement(),
PathElement.groupElement("y"));
try (Arena arena = Arena.ofShared()) {
MemorySegment segment = arena.allocate(xy);
xHandle.set(segment, 0, 5);...