PackedByteArray

Упакованный массив байтов.

Описание

Массив, специально разработанный для хранения байтов. Плотно упаковывает данные, поэтому экономит память для больших размеров массива.

PackedByteArray также предоставляет методы для кодирования/декодирования различных типов в/из байтов. Способ кодирования значений является деталью реализации и не должен использоваться при взаимодействии с внешними приложениями.

Примечание: Упакованные массивы всегда передаются по ссылке. Чтобы получить копию массива, которую можно изменять независимо от исходного массива, используйте duplicate(). Это не касается встроенных свойств и методов. В этих случаях возвращаемый упакованный массив является копией, и его изменение не повлияет на исходное значение. Чтобы обновить встроенное свойство этого типа, измените возвращаемый массив, а затем снова назначьте его свойству.

Примечание

Существуют заметные различия при использовании данного API с C#. Подробнее см. API различия C# и GDScript.

Конструкторы

PackedByteArray

PackedByteArray()

PackedByteArray

PackedByteArray(from: PackedByteArray)

PackedByteArray

PackedByteArray(from: Array)

Методы

bool

append(value: int)

void

append_array(array: PackedByteArray)

int

bsearch(value: int, before: bool = true) const

void

bswap16(offset: int = 0, count: int = -1)

void

bswap32(offset: int = 0, count: int = -1)

void

bswap64(offset: int = 0, count: int = -1)

void

clear()

PackedByteArray

compress(compression_mode: int = 0) const

int

count(value: int) const

float

decode_double(byte_offset: int) const

float

decode_float(byte_offset: int) const

float

decode_half(byte_offset: int) const

int

decode_s8(byte_offset: int) const

int

decode_s16(byte_offset: int) const

int

decode_s32(byte_offset: int) const

int

decode_s64(byte_offset: int) const

int

decode_u8(byte_offset: int) const

int

decode_u16(byte_offset: int) const

int

decode_u32(byte_offset: int) const

int

decode_u64(byte_offset: int) const

Variant

decode_var(byte_offset: int, allow_objects: bool = false) const

int

decode_var_size(byte_offset: int, allow_objects: bool = false) const

PackedByteArray

decompress(buffer_size: int, compression_mode: int = 0) const

PackedByteArray

decompress_dynamic(max_output_size: int, compression_mode: int = 0) const

PackedByteArray

duplicate() const

void

encode_double(byte_offset: int, value: float)

void

encode_float(byte_offset: int, value: float)

void

encode_half(byte_offset: int, value: float)

void

encode_s8(byte_offset: int, value: int)

void

encode_s16(byte_offset: int, value: int)

void

encode_s32(byte_offset: int, value: int)

void

encode_s64(byte_offset: int, value: int)

void

encode_u8(byte_offset: int, value: int)

void

encode_u16(byte_offset: int, value: int)

void

encode_u32(byte_offset: int, value: int)

void

encode_u64(byte_offset: int, value: int)

int

encode_var(byte_offset: int, value: Variant, allow_objects: bool = false)

bool

erase(value: int)

void

fill(value: int)

int

find(value: int, from: int = 0) const

int

get(index: int) const

String

get_string_from_ascii() const

String

get_string_from_multibyte_char(encoding: String = "") const

String

get_string_from_utf8() const

String

get_string_from_utf16() const

String

get_string_from_utf32() const

String

get_string_from_wchar() const

bool

has(value: int) const

bool

has_encoded_var(byte_offset: int, allow_objects: bool = false) const

String

hex_encode() const

int

insert(at_index: int, value: int)

bool

is_empty() const

bool

push_back(value: int)

void

remove_at(index: int)

int

resize(new_size: int)

void

reverse()

int

rfind(value: int, from: int = -1) const

void

set(index: int, value: int)

int

size() const

PackedByteArray

slice(begin: int, end: int = 2147483647) const

void

sort()

PackedColorArray

to_color_array() const

PackedFloat32Array

to_float32_array() const

PackedFloat64Array

to_float64_array() const

PackedInt32Array

to_int32_array() const

PackedInt64Array

to_int64_array() const

PackedVector2Array

to_vector2_array() const

PackedVector3Array

to_vector3_array() const

PackedVector4Array

to_vector4_array() const

Операторы

bool

operator !=(right: PackedByteArray)

PackedByteArray

operator +(right: PackedByteArray)

bool

operator ==(right: PackedByteArray)

int

operator [](index: int)


Описания конструктора

PackedByteArray PackedByteArray() 🔗

Создает пустой PackedByteArray.


PackedByteArray PackedByteArray(from: PackedByteArray)

Создает PackedByteArray как копию заданного PackedByteArray.


PackedByteArray PackedByteArray(from: Array)

Создает новый PackedByteArray. При желании можно передать общий Array, который будет преобразован.


Описания метода

bool append(value: int) 🔗

Добавляет элемент в конец массива (псевдоним push_back()).


void append_array(array: PackedByteArray) 🔗

Добавляет PackedByteArray в конец этого массива.


int bsearch(value: int, before: bool = true) const 🔗

Находит индекс существующего значения (или индекс вставки, который поддерживает порядок сортировки, если значение еще не присутствует в массиве) с помощью бинарного поиска. При желании можно передать спецификатор before. Если false, возвращаемый индекс следует после всех существующих записей значения в массиве.

Примечание: Вызов bsearch() для несортированного массива приводит к неожиданному поведению.


void bswap16(offset: int = 0, count: int = -1) 🔗

Меняет порядок байтов count 16-битных сегментов массива, начиная с offset. Обмен выполняется на месте. Если count меньше нуля, обрабатываются все сегменты до конца массива, если размер обработанных данных не кратен 2, байт после последнего обработанного 16-битного сегмента не изменяется.


void bswap32(offset: int = 0, count: int = -1) 🔗

Меняет порядок байтов count 32-битных сегментов массива, начиная с offset. Обмен выполняется на месте. Если count меньше нуля, обрабатываются все сегменты до конца массива, если размер обработанных данных не кратен 4, байты после последнего обработанного 32-битного сегмента не изменяются.


void bswap64(offset: int = 0, count: int = -1) 🔗

Меняет порядок байтов count 64-битных сегментов массива, начиная с offset. Обмен выполняется на месте. Если count меньше нуля, обрабатываются все сегменты до конца массива, если размер обработанных данных не кратен 8, байты после последнего обработанного 64-битного сегмента не изменяются.


void clear() 🔗

Очищает массив. Это эквивалентно использованию resize() с размером 0.


PackedByteArray compress(compression_mode: int = 0) const 🔗

Возвращает новый PackedByteArray со сжатыми данными. Установите режим сжатия, используя одну из констант CompressionMode.


int count(value: int) const 🔗

Возвращает количество раз когда элемент встречается в массиве.


float decode_double(byte_offset: int) const 🔗

Декодирует 64-битное число с плавающей точкой из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0.0, если допустимое число не может быть декодировано.


float decode_float(byte_offset: int) const 🔗

Декодирует 32-битное число с плавающей точкой из байтов, начиная с byte_offset. Завершается неудачей, если количество байтов недостаточно. Возвращает 0.0, если допустимое число не может быть декодировано.


float decode_half(byte_offset: int) const 🔗

Декодирует 16-битное число с плавающей точкой из байтов, начиная с byte_offset. Завершается неудачей, если количество байтов недостаточно. Возвращает 0.0, если допустимое число не может быть декодировано.


int decode_s8(byte_offset: int) const 🔗

Декодирует 8-битное целое число со знаком из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_s16(byte_offset: int) const 🔗

Декодирует 16-битное целое число со знаком из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_s32(byte_offset: int) const 🔗

Декодирует 32-битное целое число со знаком из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_s64(byte_offset: int) const 🔗

Декодирует 64-битное целое число со знаком из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_u8(byte_offset: int) const 🔗

Декодирует 8-битное целое число без знака из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_u16(byte_offset: int) const 🔗

Декодирует 16-битное целое число без знака из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_u32(byte_offset: int) const 🔗

Декодирует 32-битное целое число без знака из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


int decode_u64(byte_offset: int) const 🔗

Декодирует 64-битное целое число без знака из байтов, начиная с byte_offset. Завершается ошибкой, если количество байтов недостаточно. Возвращает 0, если допустимое число не может быть декодировано.


Variant decode_var(byte_offset: int, allow_objects: bool = false) const 🔗

Декодирует Variant из байтов, начиная с byte_offset. Возвращает null, если допустимый вариант не может быть декодирован или значение получено из Object, а allow_objects равен false.


int decode_var_size(byte_offset: int, allow_objects: bool = false) const 🔗

Декодирует размер Variant из байтов, начиная с byte_offset. Требуется не менее 4 байтов данных, начиная со смещения, в противном случае происходит сбой.


PackedByteArray decompress(buffer_size: int, compression_mode: int = 0) const 🔗

Возвращает новый PackedByteArray с распакованными данными. Установите buffer_size на размер несжатых данных. Установите режим сжатия, используя одну из констант CompressionMode.

Примечание: Распаковка не гарантирует работу с данными, не сжатыми Godot, например, если данные, сжатые с помощью режима сжатия deflate, не имеют контрольной суммы или заголовка.


PackedByteArray decompress_dynamic(max_output_size: int, compression_mode: int = 0) const 🔗

Возвращает новый PackedByteArray с распакованными данными. Установите режим сжатия, используя одну из констант CompressionMode. Этот метод принимает только режимы сжатия brotli, gzip и deflate.

Этот метод потенциально медленнее, чем decompress(), так как ему может потребоваться повторно выделить свой выходной буфер несколько раз во время распаковки, тогда как decompress() знает размер своего выходного буфера с самого начала.

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

Примечание: Не гарантируется, что декомпрессия будет работать с данными, не сжатыми Godot, например, если данные, сжатые с помощью режима сжатия deflate, не имеют контрольной суммы или заголовка.


PackedByteArray duplicate() const 🔗

Создает копию массива и возвращает ее.


void encode_double(byte_offset: int, value: float) 🔗

Кодирует 64-битное число с плавающей точкой как байты по индексу byte_offset байт. Массив должен иметь не менее 8 байт выделенного пространства, начиная со смещения.


void encode_float(byte_offset: int, value: float) 🔗

Кодирует 32-битное число с плавающей точкой как байты по индексу byte_offset байт. Массив должен иметь не менее 4 байт пространства, начиная со смещения.


void encode_half(byte_offset: int, value: float) 🔗

Кодирует 16-битное число с плавающей точкой как байты по индексу byte_offset байт. Массив должен иметь не менее 2 байт пространства, начиная со смещения.


void encode_s8(byte_offset: int, value: int) 🔗

Кодирует 8-битное целое число со знаком (знаковый байт) по индексу byte_offset байт. Массив должен иметь не менее 1 байта пространства, начиная со смещения.


void encode_s16(byte_offset: int, value: int) 🔗

Кодирует 16-битное целое число со знаком как байты по индексу byte_offset байт. Массив должен иметь не менее 2 байт пространства, начиная со смещения.


void encode_s32(byte_offset: int, value: int) 🔗

Кодирует 32-битное целое число со знаком как байты по индексу byte_offset байт. Массив должен иметь не менее 4 байт пространства, начиная со смещения.


void encode_s64(byte_offset: int, value: int) 🔗

Кодирует 64-битное целое число со знаком как байты по индексу byte_offset байт. Массив должен иметь не менее 8 байт пространства, начиная со смещения.


void encode_u8(byte_offset: int, value: int) 🔗

Кодирует 8-битное целое число без знака (байт) по индексу byte_offset байт. Массив должен иметь не менее 1 байта пространства, начиная со смещения.


void encode_u16(byte_offset: int, value: int) 🔗

Кодирует 16-битное целое число без знака как байты по индексу byte_offset байт. Массив должен иметь не менее 2 байт пространства, начиная со смещения.


void encode_u32(byte_offset: int, value: int) 🔗

Кодирует 32-битное целое число без знака как байты по индексу byte_offset байт. Массив должен иметь не менее 4 байт пространства, начиная со смещения.


void encode_u64(byte_offset: int, value: int) 🔗

Кодирует 64-битное целое число без знака как байты по индексу byte_offset байт. Массив должен иметь не менее 8 байт пространства, начиная со смещения.


int encode_var(byte_offset: int, value: Variant, allow_objects: bool = false) 🔗

Кодирует Variant по индексу byte_offset байт. Должно быть выделено достаточно места в зависимости от размера закодированного варианта. Если allow_objects равно false, значения, полученные из Object, не допускаются и будут сериализованы как только идентификаторы.


bool erase(value: int) 🔗

Удаляет первое вхождение значения из массива и возвращает true. Если значение не существует в массиве, ничего не происходит и возвращается false. Чтобы удалить элемент по индексу, используйте remove_at().


void fill(value: int) 🔗

Присваивает заданное значение всем элементам массива. Обычно это можно использовать вместе с resize() для создания массива с заданным размером и инициализированными элементами.


int find(value: int, from: int = 0) const 🔗

Ищет в массиве значение и возвращает его индекс или -1, если не найдено. При желании можно передать начальный индекс поиска.


int get(index: int) const 🔗

Возвращает байт по заданному index в массиве. Если index выходит за пределы массива или является отрицательным, этот метод завершается с ошибкой и возвращает 0.

Этот метод похож (но не идентичен) оператору []. Наиболее примечательно то, что при сбое этого метода выполнение проекта не приостанавливается, если он запускается из редактора.


String get_string_from_ascii() const 🔗

Преобразует массив в кодировке ASCII/Latin-1 в String. Быстрая альтернатива get_string_from_utf8(), если содержимое только в кодировке ASCII/Latin-1. В отличие от функции UTF-8 эта функция сопоставляет каждый байт с символом в массиве. Многобайтовые последовательности не будут интерпретироваться правильно. Для анализа пользовательского ввода всегда используйте get_string_from_utf8(). Это обратный метод String.to_ascii_buffer().


String get_string_from_multibyte_char(encoding: String = "") const 🔗

Преобразует системный многобайтовый кодовый массив в String. Если преобразование не удалось, возвращается пустая строка. Это обратный метод String.to_multibyte_char_buffer().

Допустимые значения для encoding зависят от системы. Если encoding — пустая строка, используется системная кодировка по умолчанию.


String get_string_from_utf8() const 🔗

Преобразует массив в кодировке UTF-8 в String. Медленнее, чем get_string_from_ascii(), но поддерживает данные в кодировке UTF-8. Используйте эту функцию, если вы не уверены в источнике данных. Для пользовательского ввода эта функция всегда должна быть предпочтительной. Возвращает пустую строку, если исходный массив не является допустимой строкой UTF-8. Это обратный метод String.to_utf8_buffer().


String get_string_from_utf16() const 🔗

Преобразует массив в кодировке UTF-16 в String. Если BOM отсутствует, предполагается прямой порядок байтов. Возвращает пустую строку, если исходный массив не является допустимой строкой UTF-16. Это обратный метод String.to_utf16_buffer().


String get_string_from_utf32() const 🔗

Преобразует массив в кодировке UTF-32 в String. Возвращает пустую строку, если исходный массив не является допустимой строкой UTF-32. Это обратный метод String.to_utf32_buffer().


String get_string_from_wchar() const 🔗

Преобразует массив широких символов (wchar_t, UTF-16 в Windows, UTF-32 на других платформах) в String. Возвращает пустую строку, если исходный массив не является допустимой широкой строкой. Это обратный метод String.to_wchar_buffer().


bool has(value: int) const 🔗

Возвращает true, если массив содержит value.


bool has_encoded_var(byte_offset: int, allow_objects: bool = false) const 🔗

Возвращает true, если допустимое значение Variant может быть декодировано в byte_offset. Возвращает false в противном случае или когда значение получено из Object, а allow_objects равен false.


String hex_encode() const 🔗

Возвращает шестнадцатеричное представление этого массива в виде String.

var array = PackedByteArray([11, 46, 255])
print(array.hex_encode()) # Выводит "0b2eff"

int insert(at_index: int, value: int) 🔗

Вставляет новый элемент в указанную позицию в массиве. Позиция должна быть допустимой или в конце массива (idx == size()).


bool is_empty() const 🔗

Возвращает true если массив пустой.


bool push_back(value: int) 🔗

Добавляет элемент в конец массива.


void remove_at(index: int) 🔗

Удаляет элемент из массива по индексу.


int resize(new_size: int) 🔗

Устанавливает размер массива. Если массив увеличивается, резервирует элементы в конце массива. Если массив уменьшается, усекает массив до нового размера. Вызов resize() один раз и назначение новых значений быстрее, чем добавление новых элементов по одному.

Возвращает @GlobalScope.OK в случае успеха или одну из следующих констант Error, если этот метод не удался: @GlobalScope.ERR_INVALID_PARAMETER, если размер отрицательный, или @GlobalScope.ERR_OUT_OF_MEMORY, если выделение памяти не удается. Используйте size(), чтобы узнать фактический размер массива после изменения размера.


void reverse() 🔗

Инвертирует порядок элементов в массиве.


int rfind(value: int, from: int = -1) const 🔗

Поиск в массиве в обратном порядке. При желании можно передать начальный индекс поиска. Если отрицательный, начальный индекс считается относительно конца массива.


void set(index: int, value: int) 🔗

Изменяет байт по указанному индексу.


int size() const 🔗

Возвращает число элементов в массиве.


PackedByteArray slice(begin: int, end: int = 2147483647) const 🔗

Возвращает срез PackedByteArray от begin (включительно) до end (исключительно) как новый PackedByteArray.

Абсолютное значение begin и end будет ограничено размером массива, поэтому значение по умолчанию для end делает его срезом по размеру массива по умолчанию (т. е. arr.slice(1) является сокращением для arr.slice(1, arr.size())).

Если begin или end отрицательны, они будут относительными к концу массива (т. е. arr.slice(0, -2) является сокращением для arr.slice(0, arr.size() - 2)).


void sort() 🔗

Сортирует элементы массива в порядке возрастания.


PackedColorArray to_color_array() const 🔗

Возвращает копию данных, преобразованных в PackedColorArray, где каждый блок из 16 байтов преобразован в вариант Color.

Примечание: Размер входного массива должен быть кратен 16 (размеру четырёх 32-битных переменных с плавающей точкой). Размер нового массива будет равен byte_array.size() / 16. Если исходные данные невозможно преобразовать в варианты Color, результирующие данные не определены.


PackedFloat32Array to_float32_array() const 🔗

Возвращает копию данных, преобразованных в PackedFloat32Array, где каждый блок из 4 байтов был преобразован в 32-битное число с плавающей точкой (C++ float).

Размер входного массива должен быть кратен 4 (размер 32-битного числа с плавающей точкой). Размер нового массива будет byte_array.size() / 4.

Если исходные данные не могут быть преобразованы в 32-битные числа с плавающей точкой, результирующие данные не определены.


PackedFloat64Array to_float64_array() const 🔗

Возвращает копию данных, преобразованных в PackedFloat64Array, где каждый блок из 8 байтов был преобразован в 64-битное число с плавающей точкой (C++ double, Godot float).

Размер входного массива должен быть кратен 8 (размер 64-битного числа с плавающей точкой). Размер нового массива будет byte_array.size() / 8.

Если исходные данные не могут быть преобразованы в 64-битные числа с плавающей точкой, результирующие данные не определены.


PackedInt32Array to_int32_array() const 🔗

Возвращает копию данных, преобразованных в PackedInt32Array, где каждый блок из 4 байтов был преобразован в 32-битное целое число со знаком (C++ int32_t).

Размер входного массива должен быть кратен 4 (размер 32-битного целого числа). Размер нового массива будет byte_array.size() / 4.

Если исходные данные не могут быть преобразованы в 32-битные целые числа со знаком, результирующие данные не определены.


PackedInt64Array to_int64_array() const 🔗

Возвращает копию данных, преобразованных в PackedInt64Array, где каждый блок из 8 байтов был преобразован в знаковое 64-битное целое число (C++ int64_t, Godot int).

Размер входного массива должен быть кратен 8 (размер 64-битного целого числа). Размер нового массива будет byte_array.size() / 8.

Если исходные данные не могут быть преобразованы в знаковые 64-битные целые числа, результирующие данные не определены.


PackedVector2Array to_vector2_array() const 🔗

Возвращает копию данных, преобразованных в PackedVector2Array, где каждый блок из 8 или 16 байт (32-бит или 64-бит) преобразован в вариант Vector2.

Примечание: Размер входного массива должен быть кратен 8 или 16 (в зависимости от настроек сборки, см. Vector2 для получения дополнительной информации). Размер нового массива будет равен byte_array.size() / (8 или 16). Если исходные данные не могут быть преобразованы в варианты Vector2, результирующие данные не определены.


PackedVector3Array to_vector3_array() const 🔗

Возвращает копию данных, преобразованных в PackedVector3Array, где каждый блок из 12 или 24 байт (32-бит или 64-бит) преобразован в вариант Vector3.

Примечание: Размер входного массива должен быть кратен 12 или 24 (в зависимости от настроек сборки, см. Vector3 для получения дополнительной информации). Размер нового массива будет равен byte_array.size() / (12 или 24). Если исходные данные не могут быть преобразованы в варианты Vector3, результирующие данные не определены.


PackedVector4Array to_vector4_array() const 🔗

Возвращает копию данных, преобразованных в PackedVector4Array, где каждый блок из 16 или 32 байт (32-бит или 64-бит) преобразован в вариант Vector4.

Примечание: Размер входного массива должен быть кратен 16 или 32 (в зависимости от настроек сборки, см. Vector4 для получения дополнительной информации). Размер нового массива будет равен byte_array.size() / (16 или 32). Если исходные данные не могут быть преобразованы в варианты Vector4, результирующие данные не определены.


Описания оператора

bool operator !=(right: PackedByteArray) 🔗

Возвращает true, если содержимое массивов различается.


PackedByteArray operator +(right: PackedByteArray) 🔗

Возвращает новый PackedByteArray с содержимым right, добавленным в конец этого массива. Для лучшей производительности рассмотрите возможность использования append_array() вместо этого.


bool operator ==(right: PackedByteArray) 🔗

Возвращает true, если содержимое обоих массивов одинаково, т.е. все байты в соответствующих индексах одинаковы.


int operator [](index: int) 🔗

Возвращает байт по индексу index. Отрицательные индексы можно использовать для доступа к элементам, начиная с конца. Использование индекса за пределами массива приведет к ошибке.

Обратите внимание, что байт возвращается как 64-битное int.