前言:
而今姐妹们对“javaseq”大概比较注意,兄弟们都想要知道一些“javaseq”的相关资讯。那么小编同时在网络上收集了一些对于“javaseq””的相关文章,希望我们能喜欢,兄弟们快快来了解一下吧!让我们假设我们有以下嵌套模型(与问题151中的模型完全相同):
SequenceLayout innerSeq = MemoryLayout.sequenceLayout(5, ValueLayout.JAVA_DOUBLE);SequenceLayout outerSeq = MemoryLayout.sequenceLayout(10, innerSeq);
接下来,我们通过PathElement定义一个VarHandle,并用一些随机数据相应地填充这个模型(你可以在问题151中看到列出的代码)。我们的目标是获取这个嵌套模型,并得到一个平面模型。也就是说,我们不想拥有10个包含5个双精度浮点数的序列,而是想要一个包含50个双精度浮点数的单一序列。这可以通过flatten()方法实现,如下所示:
SequenceLayout flatten = outerSeq.flatten(); VarHandle fhandle = flatten.varHandle( PathElement.sequenceElement()); for (int i = 0; i < flatten.elementCount(); i++) { System.out.printf("\nx = %.2f", fhandle.get(segment, i));}
注意PathElement,它遍历了一个单一序列。这是展平操作后得到的序列。我们可以进一步为这个序列分配另一个内存段,并设置新数据:
复制
try (Arena arena = Arena.openConfined()) { MemorySegment segment = arena.allocate(flatten); for (int i = 0; i < flatten.elementCount(); i++) { fhandle.set(segment, i, Math.random()); } }
接下来,让我们看看如何重新塑形一个内存布局。
标签: #javaseq