Интерфейс BufWriter
public sealed interface BufWriter
class для интерфейсов AttributeMapper. Поддерживается запись частей файла class в расширяемый буфер, например запись различных числовых типов (например, u2, u4) в конец буфера, а также создание записей в пуле констант. Все числовые значения в формате файла class записываются в порядке от старшего байта к младшему. При записи больших числовых значений в поля меньшего размера всегда выполняется усечение: сохраняются младшие байты, а остальные байты отбрасываются без уведомления. Поэтому методы записи числовых значений могут записывать как знаковые, так и беззнаковые значения. Если отбрасывание старших байтов без уведомления нежелательно, пользователям следует проверить значения перед записью.
- С момента:
- 24
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
canWriteDirect |
Возвращает, совместим ли предоставленный пул констант по индексам с пулом констант этого буфера. |
ConstantPoolBuilder |
constantPool() |
Возвращает построитель пула констант, связанный с этим буфером. |
void |
patchInt |
Исправляет ранее записанное целочисленное значение. |
void |
reserveSpace |
Обеспечивает наличие в конце буфера как минимум freeBytes байт свободного пространства. |
int |
size() |
Возвращает количество байтов, записанных в буфер. |
void |
writeBytes |
Записывает содержимое массива байтов в буфер. |
void |
writeBytes |
Записывает диапазон массива байтов в буфер. |
void |
writeDouble |
Записывает в буфер значение типа double размером 8 байт. |
void |
writeFloat |
Записывает в буфер значение типа float размером 4 байта. |
void |
writeIndex |
Записывает индекс указанной записи пула констант как u2. |
void |
writeIndexOrZero |
Записывает индекс указанной записи пула констант или значение 0, если указанная запись — null, как u2. |
void |
writeInt |
Записывает в буфер 4 байта, то есть значение типа int. |
void |
writeIntBytes |
Записывает в буфер многобайтовое значение. |
void |
writeLong |
Записывает в буфер 8 байт, то есть значение типа long. |
void |
writeU1 |
Записывает байт в буфер. |
void |
writeU2 |
Записывает в буфер 2 байта, то есть значение типа short. |
Подробное описание методов
constantPool
ConstantPoolBuilder constantPool()
- Возвращает:
- построитель пула констант, связанный с этим буфером
- См. также:
canWriteDirect
boolean canWriteDirect(ConstantPool other)
Это сокращённая форма записи для constantPool().canWriteDirect(other).
- Параметры:
-
other— другой пул констант - Возвращает:
- признак совместимости предоставленного пула констант по индексам с пулом констант этого буфера
- См. также:
reserveSpace
void reserveSpace(int freeBytes)
freeBytes байт свободного пространства. Результат записи будет таким же и без вызовов этого метода, однако процесс записи может выполняться медленнее.
- Примечание API:
- Это рекомендация, не изменяющая видимое состояние буфера; она помогает сократить количество перераспределений базового хранилища, выделяя сразу достаточно места.
- Параметры:
-
freeBytes— количество байтов для резервирования
writeU1
void writeU1(int x)
x усекается до одного байта и записывается.- Параметры:
-
x— значение, которое нужно усечь до одного байта
writeU2
void writeU2(int x)
x усекается до двух байтов и записывается.- Параметры:
-
x— значение, которое нужно усечь до short
writeInt
void writeInt(int x)
- Параметры:
-
x— значение типа int
writeFloat
void writeFloat(float x)
При преобразовании все значения NaN типа float могут быть сведены или не сведены к одному «каноническому» значению NaN.
- Параметры:
-
x— значение типа float
writeLong
void writeLong(long x)
- Параметры:
-
x— значение типа long
writeDouble
void writeDouble(double x)
При преобразовании все значения NaN типа double могут быть сведены или не сведены к одному «каноническому» значению NaN.
- Параметры:
-
x— значение типа double
writeBytes
void writeBytes(byte[] arr)
- Параметры:
-
arr— массив байтов
writeBytes
void writeBytes(byte[] arr, int start, int length)
- Параметры:
-
arr— массив байтов -
start— начальное смещение диапазона в массиве байтов -
length— длина диапазона - Исключения:
-
IndexOutOfBoundsException— если диапазон выходит за границы массива
patchInt
void patchInt(int offset, int size, int value)
value усекается до заданного количества байтов (size) и записывается по заданному смещению (
offset). Конец этого буфера остаётся без изменений.- Примечание API:
- Значение
offsetможно получить, вызвавsize()перед записью предыдущего целочисленного значения. - Параметры:
-
offset— смещение в этом буфере, по которому нужно выполнить исправление -
size— размер записываемого целочисленного значения в байтах -
value— целочисленное значение, которое нужно усечь - Исключения:
-
IndexOutOfBoundsException— если исправляемое целое значение выходит за границы - См. также:
writeIntBytes
void writeIntBytes(int intSize, long intValue)
intValue усекается до заданного количества байтов (intSize) и записывается.- Параметры:
-
intSize— размер записываемого целочисленного значения в байтах -
intValue— значение, которое нужно усечь
writeIndex
void writeIndex(PoolEntry entry)
u2. Если entry не принадлежит пулу констант этого буфера, она будет преобразована, и вместо неё будет записан индекс преобразованной записи пула.- Параметры:
-
entry— запись пула констант - Исключения:
-
IllegalArgumentException— если запись имеет недопустимый индекс
writeIndexOrZero
void writeIndexOrZero(PoolEntry entry)
0, если указанная запись — null, как u2. Если entry не принадлежит пулу констант этого буфера, она будет преобразована, и вместо неё будет записан индекс преобразованной записи пула.- Параметры:
-
entry— запись пула констант; может бытьnull - Исключения:
-
IllegalArgumentException— если запись не являетсяnullи имеет недопустимый индекс
size
int size()
- Возвращает:
- количество байтов, записанных в буфер
- См. также:
© 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/classfile/BufWriter.html