Spec-Zone.ru › OpenJDK 24

Интерфейс BufWriter

public sealed interface BufWriter
Расширенная class поддержка записи файлов для AttributeMapper. Поддерживает запись фрагментов файла class в динамический буфер, например, запись различных числовых типов (например, u2, u4) в конец буфера, а также создание записей пула констант.

Все числовые значения в формате файла class являются big endian. Запись числовых значений большего размера в числовые значения меньшего размера всегда выполняется с усечением, сохраняя наименее значимые байты, а другие байты отбрасываются. В результате методы записи числовых значений могут записывать как знакомые, так и беззнаковые значения, и пользователи должны валидировать свои значения перед записью, если нежелательно автоматическое отбрасывание старших байтов.

С момента:
24
См. также:
  • AttributeMapper.writeAttribute(BufWriter, Attribute)

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

Модификатор и тип Метод Описание
boolean canWriteDirect(ConstantPool other)
Возвращает, совместим ли предоставленный пул констант с пулом констант этого буфера.
ConstantPoolBuilder constantPool()
Возвращает создатель пула констант, связанный с этим буфером.
void patchInt(int offset, int size, int value)
Обновляет ранее записанное целое значение.
void reserveSpace(int freeBytes)
Обеспечивает, что буфер имеет как минимум freeBytes байт свободного места в конце буфера.
int size()
Возвращает количество байтов, записанных в буфер.
void writeBytes(byte[] arr)
Записывает содержимое массива байтов в буфер.
void writeBytes(byte[] arr, int start, int length)
Записывает диапазон массива байтов в буфер.
void writeDouble(double x)
Записывает значение типа double, занимающее 8 байт, в буфер.
void writeFloat(float x)
Записывает значение типа float, занимающее 4 байта, в буфер.
void writeIndex(PoolEntry entry)
Записывает индекс указанной записи пула констант в виде u2.
void writeIndexOrZero(PoolEntry entry)
Записывает индекс указанной записи пула констант или значение 0, если указанная запись является null, в виде u2.
void writeInt(int x)
Записывает 4 байта или целое значение в буфер.
void writeIntBytes(int intSize, long intValue)
Записывает многобайтовое значение в буфер.
void writeLong(long x)
Записывает 8 байт или значение long в буфер.
void writeU1(int x)
Записывает байт в буфер.
void writeU2(int x)
Записывает 2 байта или значение short в буфер.

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

constantPool

ConstantPoolBuilder constantPool()
Возвращает создатель константного пула, связанный с этим буфером.
Возвращает:
создатель константного пула, связанный с этим буфером
См. также:
  • ClassFileBuilder.constantPool()

canWriteDirect

boolean canWriteDirect(ConstantPool other)
Возвращает, совместим ли предоставленный константный пул с индексом константного пула этого буфера.

Это сокращение для constantPool().canWriteDirect(other).

Параметры:
other - другой константный пул
Возвращает:
совместим ли предоставленный константный пул с индексом константного пула этого буфера
См. также:
  • ConstantPoolBuilder.canWriteDirect(ConstantPool)

reserveSpace

void reserveSpace(int freeBytes)
Обеспечивает, что буфер имеет как минимум freeBytes байта свободного места в конце буфера.

Результат записи такой же, без вызовов этого метода, но процесс записи может быть медленнее.

Примечание API:
Это подсказка, которая не изменяет видимое состояние буфера; она помогает уменьшить перераспределение базового хранилища, выделяя достаточное пространство сразу.
Параметры:
freeBytes - количество байтов для резервирования

writeU1

void writeU1(int x)
Записывает байт в буфер. x усекается до байта и записывается.
Параметры:
x - значение для усечения до байта

writeU2

void writeU2(int x)
Записывает 2 байта, или короткий, в буфер. x усекается до двух байтов и записывается.
Параметры:
x - значение для усечения до короткого

writeInt

void writeInt(int x)
Записывает 4 байта, или целое число, в буфер.
Параметры:
x - значение int

writeFloat

void writeFloat(float x)
Записывает значение float, 4 байта, в буфер.

При преобразованиях все значения NaN из float могут или не могут быть объединены в одно "каноническое" значение NaN.

Параметры:
x - значение float

writeLong

void writeLong(long x)
Записывает 8 байт, или long, в буфер.
Параметры:
x - значение long

writeDouble

void writeDouble(double x)
Записывает значение double, 8 байт, в буфер.

При преобразованиях все значения 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 - если обновленное целое число выходит за пределы
См. также:
  • size()

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 и имеет неверный индекс

размер

int size()
Возвращает количество байтов, записанных в буфер.
Возвращает:
количество байтов, записанных в буфер
См. также:
  • patchInt(int, int, int)

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/classfile/BufWriter.html

Spec-Zone.ru

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