Интерфейс 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));
- Требования к реализации:
- Этот класс неизменяемый, потокобезопасный и основан на значении (value-based).
- Начиная с версии:
- 22
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе MemoryLayout
MemoryLayout.PathElement
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
long |
elementCount() |
Возвращает число элементов этого последовательного макета. |
MemoryLayout |
elementLayout() |
Возвращает макет элемента этого последовательного макета. |
SequenceLayout |
flatten() |
Возвращает уплощённый последовательный макет. |
SequenceLayout |
reshape |
Располагает элементы этого последовательного макета в многомерном последовательном макете. |
SequenceLayout |
withByteAlignment |
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах). |
SequenceLayout |
withElementCount |
Возвращает последовательный макет с теми же характеристиками, что и у этого макета, но с заданным числом элементов. |
SequenceLayout |
withName |
Возвращает макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем. |
Методы, объявленные в интерфейсе MemoryLayout
arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle, 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— имя макета - Возвращает:
- макет памяти с теми же характеристиками, что и у этого макета, но с заданным именем
- См. также:
withByteAlignment
SequenceLayout withByteAlignment(long byteAlignment)
- Определено в:
-
withByteAlignmentв интерфейсеMemoryLayout - Параметры:
-
byteAlignment— ограничение выравнивания макета, выраженное в байтах - Возвращает:
- макет памяти с теми же характеристиками, что и у этого макета, но с заданным ограничением выравнивания (в байтах)
- Вызывает исключение:
-
IllegalArgumentException— еслиbyteAlignmentне является степенью двойки -
IllegalArgumentException— еслиbyteAlignment < elementLayout().byteAlignment()
© 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/foreign/SequenceLayout.html