Spec-Zone.ru › OpenJDK 25

Интерфейс BufWriter

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

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

С момента:
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 байта, то есть значение типа int.
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 байта, то есть значение типа short. Значение x усекается до двух байтов и записывается.
Параметры:
x — значение, которое нужно усечь до short

writeInt

void writeInt(int x)
Записывает в буфер 4 байта, то есть значение типа int.
Параметры:
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 и имеет недопустимый индекс

size

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/classfile/BufWriter.html

Spec-Zone.ru

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