PackedByteArray
Упакований масив байтів.
Опис
Масив, спеціально розроблений для зберігання байтів. Щільно упаковує дані, що економить пам'ять для масивів великого розміру.
PackedByteArray також надає методи для кодування/декодування різних типів у/з байтів. Спосіб кодування значень є деталлю реалізації і не повинен використовуватися під час взаємодії із зовнішніми програмами.
Примітка: Упаковані масиви завжди передаються за посиланням. Щоб отримати копію масиву, яку можна змінювати незалежно від оригінального масиву, використовуйте duplicate(). Це не стосується вбудованих властивостей і методів. У цих випадках повернений упакований масив є копією, і його зміна не вплине на оригінальне значення. Щоб оновити вбудовану властивість цього типу, змініть повернений масив, а потім знову призначте його властивості.
Примітка
Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.
Конструктори
PackedByteArray(from: PackedByteArray) |
|
PackedByteArray(from: Array) |
Методи
void |
append_array(array: PackedByteArray) |
void |
|
void |
|
void |
|
void |
clear() |
decode_double(byte_offset: int) const |
|
decode_float(byte_offset: int) const |
|
decode_half(byte_offset: int) const |
|
decode_s16(byte_offset: int) const |
|
decode_s32(byte_offset: int) const |
|
decode_s64(byte_offset: int) const |
|
decode_u16(byte_offset: int) const |
|
decode_u32(byte_offset: int) const |
|
decode_u64(byte_offset: int) const |
|
decode_var(byte_offset: int, allow_objects: bool = false) const |
|
decode_var_size(byte_offset: int, allow_objects: bool = false) const |
|
decompress(buffer_size: int, compression_mode: int = 0) const |
|
decompress_dynamic(max_output_size: int, compression_mode: int = 0) 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 |
|
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 |
|
void |
encode_u16(byte_offset: int, value: int) |
void |
encode_u32(byte_offset: int, value: int) |
void |
encode_u64(byte_offset: int, value: int) |
encode_var(byte_offset: int, value: Variant, allow_objects: bool = false) |
|
void |
|
get_string_from_ascii() const |
|
get_string_from_multibyte_char(encoding: String = "") const |
|
get_string_from_utf8() const |
|
get_string_from_utf16() const |
|
get_string_from_utf32() const |
|
get_string_from_wchar() const |
|
has_encoded_var(byte_offset: int, allow_objects: bool = false) const |
|
hex_encode() const |
|
is_empty() const |
|
void |
|
void |
reverse() |
void |
|
size() const |
|
void |
sort() |
to_color_array() const |
|
to_float32_array() const |
|
to_float64_array() const |
|
to_int32_array() const |
|
to_int64_array() const |
|
to_vector2_array() const |
|
to_vector3_array() const |
|
to_vector4_array() const |
Оператори
operator !=(right: PackedByteArray) |
|
operator +(right: PackedByteArray) |
|
operator ==(right: PackedByteArray) |
|
operator [](index: int) |
Описи конструкторів
PackedByteArray PackedByteArray() 🔗
Будуємо порожній PackedByteArray.
PackedByteArray PackedByteArray(from: PackedByteArray)
Constructs a PackedByteArray як копія даної PackedByteArray.
PackedByteArray PackedByteArray(from: Array)
Будуємо новий PackedByteArray. Додатково ви можете пройти в загальній Array, яка буде перетворена.
Описи методів
Додає елемент у кінець масиву (псевдонім 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.
Повертає кількість повторень елемента в масиві.
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.
Видаляє перше входження значення з масиву та повертає true. Якщо значення не існує в масиві, нічого не відбувається, і повертається false. Щоб видалити елемент за індексом, використовуйте метод remove_at().
Присвоює задане значення всім елементам масиву. Зазвичай це можна використовувати разом з resize() для створення масиву заданого розміру та ініціалізованих елементів.
int find(value: int, from: int = 0) const 🔗
Шукає в масиві значення і повертає його індекс або -1, якщо таке не знайдено. За бажанням можна передати початковий індекс пошуку.
Повертає байт за заданим 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 є порожнім рядком, використовується системне кодування за замовчуванням.
Для Windows див. Ідентифікатори кодових сторінок імена .NET.
Для macOS та Linux/BSD див. документацію до бібліотеки
libiconvтаiconv --listдля списку підтримуваних кодувань.
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().
Повертає 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.
var array = PackedByteArray([11, 46, 255])
print(array.hex_encode()) # Виводить "0b2eff"
byte[] array = [11, 46, 255];
GD.Print(array.HexEncode()); // Виводить "0b2eff"
int insert(at_index: int, value: int) 🔗
Вставте новий елемент на даній позиції в масиві. Посада повинна бути дійсна, або в кінці масиву (idx == розмір()).
Повертає true, якщо масив порожній.
Додаток елемента в кінці масиву.
Видаляє елемент з масиву за індексом.
Встановлює розмір масиву. Якщо масив збільшується, резервує елементи в кінці масиву. Якщо масив скорочується, обрізає масив до нового розміру. Виклик методу 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) 🔗
Змінює байт за вказаним індексом.
Повертає кількість елементів у масиві.
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, якщо вміст обох масивів однаково, тобто вони мають всі рівні байти за відповідними показниками.
Повернення байтів за індексом index. Негативні індекси можуть використовуватися для доступу до елементів з кінця. Використання індексу з меж масиву призведе до помилки.
Зауважте, що байт повертається як 64-розрядний.