API MemoryStream - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
MemoryStream
Оглавление · Алфавитный указатель · BASIC built-ins
ClassicUO • Runtime API
Создаёт пустой двоичный поток в памяти для совместимых команд, например HTTP_Get(URL,stream).
Точный синтаксис
MemoryStream() -> Any
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Object MemoryStream, не Array и не строка. Его методы: Length()/Position() возвращают Integer размер/позицию в байтах; ReadByte() — 0..255 либо -1 в конце; ToArray() — Array Integer-байтов. Clear(), Rewind(), SaveToFile(fileName) возвращают Unit.
Поведение
- Параметров конструктора нет. Clear обнуляет длину и позицию; Rewind ставит позицию на 0; ReadByte продвигает её на один байт при успехе.
- ToArray создаёт копию всех байтов независимо от позиции чтения. SaveToFile(fileName) полностью записывает эти байты в указанный файл, заменяя прежнее содержимое. Родительская папка должна существовать.
- Два отдельных MemoryStream() — разные объекты даже с одинаковыми байтами. Присваивание второй переменной сохраняет ссылку на тот же объект.
Примеры
Пример 1. Проверить пустой поток
# Проверить пустой поток
#
# Создаёт пустой двоичный поток в памяти для совместимых команд, например HTTP_Get(URL,stream).
#
# Object MemoryStream, не Array и не строка. Его методы: Length()/Position() возвращают Integer
# размер/позицию в байтах; ReadByte() — 0..255 либо -1 в конце; ToArray() — Array
# Integer-байтов. Clear(), Rewind(), SaveToFile(fileName) возвращают Unit.
SUB Main()
# Аргументов нет; новый поток пуст.
# Length() даёт 0, ReadByte() даёт -1. -1 не является допустимым байтом.
VAR stream = MemoryStream()
UO.Print(STR(stream.Length()))
UO.Print(STR(stream.ReadByte()))
END SUB
Разбор параметров и выполнения:
- Аргументов нет; новый поток пуст.
- Length() даёт 0, ReadByte() даёт -1. -1 не является допустимым байтом.
Пример 2. Получить двоичные данные по HTTP
# Получить двоичные данные по HTTP
#
# Создаёт пустой двоичный поток в памяти для совместимых команд, например HTTP_Get(URL,stream).
#
# Object MemoryStream, не Array и не строка. Его методы: Length()/Position() возвращают Integer
# размер/позицию в байтах; ReadByte() — 0..255 либо -1 в конце; ToArray() — Array
# Integer-байтов. Clear(), Rewind(), SaveToFile(fileName) возвращают Unit.
SUB Main()
# HTTP_Get получает URL и объект stream. Используйте собственный нужный URL; при запуске этот
# пример обращается в сеть.
# ToArray возвращает копию байтов, не декодированный текст. Размер 0 сам по себе не подтверждает
# успешный HTTP-ответ; учитывайте контракт HTTP_Get.
VAR stream = MemoryStream()
UO.HTTP_Get('https://example.com/', stream)
VAR bytes = stream.ToArray()
UO.Print('Downloaded bytes: ' + STR(GetArrayLength(bytes)))
END SUB
Разбор параметров и выполнения:
- HTTP_Get получает URL и объект stream. Используйте собственный нужный URL; при запуске этот пример обращается в сеть.
- ToArray возвращает копию байтов, не декодированный текст. Размер 0 сам по себе не подтверждает успешный HTTP-ответ; учитывайте контракт HTTP_Get.
Пример 3. Перечитать первый байт и затем очистить
# Перечитать первый байт и затем очистить
#
# Создаёт пустой двоичный поток в памяти для совместимых команд, например HTTP_Get(URL,stream).
#
# Object MemoryStream, не Array и не строка. Его методы: Length()/Position() возвращают Integer
# размер/позицию в байтах; ReadByte() — 0..255 либо -1 в конце; ToArray() — Array
# Integer-байтов. Clear(), Rewind(), SaveToFile(fileName) возвращают Unit.
SUB Main()
# После HTTP_Get проверяется наличие байтов перед чтением. Rewind возвращает позицию на начало.
# Два чтения первого байта совпадают; Clear в конце удаляет все данные потока. Сам объект
# остаётся пригодным для следующего запроса.
VAR stream = MemoryStream()
UO.HTTP_Get('https://example.com/', stream)
IF stream.Length() > 0 THEN
VAR first = stream.ReadByte()
stream.Rewind()
UO.Print(STR(first = stream.ReadByte()))
END IF
stream.Clear()
END SUB
Разбор параметров и выполнения:
- После HTTP_Get проверяется наличие байтов перед чтением. Rewind возвращает позицию на начало.
- Два чтения первого байта совпадают; Clear в конце удаляет все данные потока. Сам объект остаётся пригодным для следующего запроса.