Spec-Zone.ru › OpenJDK 27

Интерфейс SequenceLayout

Все суперинтерфейсы:
MemoryLayout
public sealed interface SequenceLayout extends MemoryLayout
Составной макет, обозначающий однородное повторение заданного макета элемента. Количество повторений называется числом элементов последовательного макета. Последовательный макет можно рассматривать как макет структуры, в котором макет элемента последовательного макета повторяется столько раз, сколько составляет число его элементов. Иными словами, этот макет:
MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
эквивалентен следующему макету:
MemoryLayout.structLayout(
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
Требования к реализации:
Этот класс неизменяемый, потокобезопасный и основанный на значении.
Начиная с:
22

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе MemoryLayout

MemoryLayout.PathElement
Модификатор и тип Интерфейс Описание
static interface  MemoryLayout.PathElement
Элемент в пути макета.

Краткое описание методов

Модификатор и тип Метод Описание
long elementCount()
Возвращает число элементов этого последовательного макета.
MemoryLayout elementLayout()
Возвращает макет элемента этого последовательного макета.
SequenceLayout flatten()
Возвращает уплощённый последовательный макет.
SequenceLayout reshape(long... elementCounts)
Переупорядочивает элементы этого последовательного макета, преобразуя его в многомерный последовательный макет.
SequenceLayout withByteAlignment(long byteAlignment)
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах).
SequenceLayout withElementCount(long elementCount)
Возвращает последовательный макет с теми же характеристиками, что и у этого макета, но с заданным числом элементов.
SequenceLayout withName(String name)
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем.

Методы, объявленные в интерфейсе MemoryLayout

arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle, withoutName
Модификатор и тип Метод Описание
VarHandle arrayElementVarHandle(MemoryLayout.PathElement... elements)
Создаёт дескриптор переменной, который обращается к соседним элементам сегмента памяти по смещениям, выбранным заданным путем макета, причем доступные элементы имеют этот макет, а начальным макетом в пути является этот макет.
long byteAlignment()
Возвращает ограничение выравнивания, связанное с этим макетом и выраженное в байтах.
long byteOffset(MemoryLayout.PathElement... elements)
Вычисляет смещение в байтах макета, выбранного заданным путем макета, где начальным макетом в пути является этот макет.
MethodHandle byteOffsetHandle(MemoryLayout.PathElement... elements)
Создаёт дескриптор метода, вычисляющий смещение в байтах макета, выбранного заданным путем макета, где начальным макетом в пути является этот макет.
long byteSize()
Возвращает размер макета в байтах.
boolean equals(Object other)
Сравнивает указанный объект с этим макетом на равенство.
int hashCode()
Возвращает хеш-код этого макета.
Optional<String> name()
Возвращает имя (если оно есть), связанное с этим макетом.
long scale(long offset, long index)
Возвращает offset + (byteSize() * index).
MethodHandle scaleHandle()
Возвращает дескриптор метода, который можно использовать для вызова MemoryLayout.scale(long, long) для этого макета.
MemoryLayout select(MemoryLayout.PathElement... elements)
Возвращает макет, выбранный по заданному пути, где начальным макетом в пути является этот макет.
MethodHandle sliceHandle(MemoryLayout.PathElement... elements)
Создаёт дескриптор метода, который принимает сегмент памяти и возвращает срез, соответствующий макету, выбранному заданным путем макета, где начальным макетом в пути является этот макет.
String toString()
Возвращает строковое представление этого макета.
VarHandle varHandle(MemoryLayout.PathElement... elements)
Создаёт дескриптор переменной, который обращается к сегменту памяти по смещению, выбранному заданным путем макета, где начальным макетом в пути является этот макет.
MemoryLayout withoutName()
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но без имени.

Подробное описание методов

elementLayout

MemoryLayout elementLayout()
Возвращает макет элемента этого последовательного макета.
Возвращает:
макет элемента этого последовательного макета

elementCount

long elementCount()
Возвращает число элементов этого последовательного макета.
Возвращает:
число элементов этого последовательного макета

withElementCount

SequenceLayout withElementCount(long elementCount)
Возвращает последовательный макет с теми же характеристиками, что и у этого макета, но с заданным числом элементов.
Параметры:
elementCount — новое число элементов
Возвращает:
последовательный макет с теми же характеристиками, что и у этого макета, но с заданным числом элементов
Вызывает исключение:
IllegalArgumentException — если elementCount отрицательно
IllegalArgumentException — если происходит переполнение elementLayout.bitSize() * elementCount

reshape

SequenceLayout reshape(long... elementCounts)
Переупорядочивает элементы этого последовательного макета, преобразуя его в многомерный последовательный макет. Результирующий макет представляет собой последовательный макет, в котором макеты элементов из уплощённого представления этого последовательного макета переупорядочены в один или несколько вложенных последовательных макетов согласно заданным числам элементов. Это преобразование сохраняет размер макета; то есть произведение заданных чисел элементов должно быть равно числу элементов в уплощённом представлении этого последовательного макета.

Например, для последовательного макета вида:

var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
вызов seq.reshape(2, 6) даст следующий последовательный макет:
var reshapeSeq = MemoryLayout.sequenceLayout(2, MemoryLayout.sequenceLayout(6, ValueLayout.JAVA_INT));

Если одно из заданных чисел элементов является специальным значением -1, число элементов в этой позиции будет вычислено по остальным числам элементов и числу элементов в уплощённом представлении этого макета. Например, макет, эквивалентный указанному выше reshapeSeq, можно также вычислить следующими способами:

var reshapeSeqImplicit1 = seq.reshape(-1, 6);
var reshapeSeqImplicit2 = seq.reshape(2, -1);
Параметры:
elementCounts — массив чисел элементов, не более одного из которых может быть -1
Возвращает:
последовательный макет, в котором макеты элементов из уплощённого представления этого последовательного макета (см. flatten()) переупорядочены в один или несколько вложенных последовательных макетов
Вызывает исключение:
IllegalArgumentException — если двум или более числам элементов присвоено значение -1, либо если одно или несколько чисел элементов равны <= 0 (но не -1), либо если после необходимого вычисления произведение чисел элементов не равно числу элементов в уплощённом представлении этого последовательного макета

flatten

SequenceLayout flatten()
Возвращает уплощённый последовательный макет. Макет элемента возвращённого последовательного макета — это первый не являющийся последовательным макет, найденный при проверке макета элемента этого последовательного макета (при необходимости рекурсивно):
MemoryLayout flatElementLayout(SequenceLayout sequenceLayout) {
   return switch (sequenceLayout.elementLayout()) {
       case SequenceLayout nestedSequenceLayout -> flatElementLayout(nestedSequenceLayout);
       case MemoryLayout layout -> layout;
   };
}

Это преобразование сохраняет размер макета; вложенные последовательные макеты в этом последовательном макете удаляются, а их числа элементов учитываются в числе элементов возвращённого последовательного макета. Например, для последовательного макета вида:

var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
вызов seq.flatten() даст следующий последовательный макет:
var flattenedSeq = MemoryLayout.sequenceLayout(12, ValueLayout.JAVA_INT);
Возвращает:
последовательный макет того же размера, что и этот макет (но, возможно, с другим числом элементов), макет элемента которого не является последовательным макетом

withName

SequenceLayout withName(String name)
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем.
Переопределено из:
withName в интерфейсе MemoryLayout
Параметры:
name — имя макета
Возвращает:
макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем
См. также:
  • MemoryLayout.name()

withByteAlignment

SequenceLayout withByteAlignment(long byteAlignment)
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах).
Переопределено из:
withByteAlignment в интерфейсе MemoryLayout
Параметры:
byteAlignment — ограничение выравнивания макета, выраженное в байтах
Возвращает:
макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах)
Вызывает исключение:
IllegalArgumentException — если byteAlignment не является степенью двойки
IllegalArgumentException — если byteAlignment < elementLayout().byteAlignment()

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API