PackedByteArray

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

Опис

Масив, спеціально розроблений для зберігання байтів. Щільно упаковує дані, що економить пам'ять для масивів великого розміру.

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

Примітка: Упаковані масиви завжди передаються за посиланням. Щоб отримати копію масиву, яку можна змінювати незалежно від оригінального масиву, використовуйте duplicate(). Це не стосується вбудованих властивостей і методів. У цих випадках повернений упакований масив є копією, і його зміна не вплине на оригінальне значення. Щоб оновити вбудовану властивість цього типу, змініть повернений масив, а потім знову призначте його властивості.

Примітка

Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.

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

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)

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()

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)

Constructs a 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) 🔗

Знаходить індекс існуючого значення (або індекс вставки, який підтримує порядок сортування, якщо значення ще не присутнє в масиві) за допомогою бінарного пошуку. За бажанням можна передати специфікатор before. Якщо false, індекс, що повертається, йде після всіх існуючих записів значення в масиві.

Примітка: Виклик bsearch() на невідсортованому масиві призводить до неочікуваної поведінки.


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

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


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

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


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

Міняє місцями порядок байтів 64-бітних сегментів масиву з параметром count, починаючи з параметра 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 🔗

Decodes a 8-bit підписано ціле число з байтів від byte_offset. Недостатня кількість байтів. Повернення 0 якщо дійсний номер не може бути декодований.


int decode_s16(byte_offset: int) const 🔗

Коди 16-біту підписано ціле число з байтів, починаючи від byte_offset. Недостатня кількість байтів. Повернення 0 якщо дійсний номер не може бути декодований.


int decode_s32(byte_offset: int) const 🔗

Decodes a 32-bit підписано ціле число з байтів від 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-derived і 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, наприклад, якщо дані стиснені з режимом стиснення дефлата не вистачає чекусу або заголовка.


PackedByteArray duplicate() 🔗

Створює копію масиву і повертає його.


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-bit не позначено ціле число як байтів в індексі 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-derived значення не дозволені, а замість того, як він послідовний як ID-only.


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-derived і 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 == розмір()).


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, з start (включно) до end (виключно), як новий PackedByteArray.

Абсолютне значення start і end буде зафіксовано до розміру масиву, тому значення за замовчуванням для end робить кінець розрізу кінцем масиву за замовчуванням (тобто arr.slice(1) є скороченим записом для arr.slice(1, arr.size())).

Якщо ж start або 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-bit float). Розмір нового масиву буде 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-розрядний.