Spec-Zone.ru › Pony

Reader

[Источник]

Хранение сетевых данных и предоставление интерфейса для парсинга.

Reader предоставляет способ извлечения типизированных данных из последовательности байтов. Reader управляет базовыми структурами данных для предоставления курсора чтения по непрерывной последовательности байтов. Это полезно для декодирования данных, получаемых по сети или хранящихся в файле. Блоки байтов добавляются в Reader с помощью метода append, а типизированные данные извлекаются с помощью методов-геттеров.

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

  • list_size — количество элементов в последующем списке элементов как 32-битовое целое число в формате big-endian
  • ноль или более элементов следующих данных:
  • число с плавающей точкой 64-бита в формате big-endian
  • строка, начинающаяся с 32-битового целого числа в формате big-endian, указывающего длину строки, за которой следует количество байтов, представляющих строку

Сообщение могло бы выглядеть так:

[message_length][list_size][float1][string1][float2][string2]...

Следующая программа использует Reader для декодирования сообщения такого типа и вывода их:

use "buffered"
use "collections"

class Notify is InputNotify
  let _env: Env
  new create(env: Env) =>
    _env = env
  fun ref apply(data: Array[U8] iso) =>
    let rb = Reader
    rb.append(consume data)
    try
      while true do
        let len = rb.i32_be()?
        let items = rb.i32_be()?.usize()
        for range in Range(0, items) do
          let f = rb.f32_be()?
          let str_len = rb.i32_be()?.usize()
          let str = String.from_array(rb.block(str_len)?)
          _env.out.print("[(" + f.string() + "), (" + str + ")]")
        end
      end
    end

actor Main
  new create(env: Env) =>
    env.input(recover Notify(env) end, 1024)
class ref Reader

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

create

[Источник]

new iso create()
: Reader iso^

Возвращает

  • Reader iso^

Общедоступные функции

size

[Источник]

Возвращает количество доступных байтов.

fun box size()
: USize val

Возвращает

  • USize val

clear

[Источник]

Отбрасывает все ожидаемые данные.

fun ref clear()
: None val

Возвращает

  • None val

append

[Источник]

Добавляет блок данных.

fun ref append(
  data: (String val | Array[U8 val] val))
: None val

Параметры

  • data: (String val | Массив[U8 val] val)

Возвращает

  • None val

skip

[Источник]

Пропускает n байтов.

fun ref skip(
  n: USize val)
: None val ?

Параметры

  • n: USize val

Возвращает

  • None val ?

block

[Источник]

Возвращает блок как непрерывный фрагмент памяти. Вызовет ошибку, если запрашиваемый блок больше, чем текущий объем данных в Reader.

fun ref block(
  len: USize val)
: Array[U8 val] iso^ ?

Параметры

  • len: USize val

Возвращает

  • Массив[U8 val] iso^ ?

read_until

[Источник]

Находит первое вхождение разделителя и возвращает блок байтов перед его позицией. Разделитель не включается в возвращаемый массив, но удаляется из буфера. Для чтения строки текста предпочтительнее использовать line(), которая обрабатывает \n и \r\n.

fun ref read_until(
  separator: U8 val)
: Array[U8 val] iso^ ?

Параметры

  • separator: U8 val

Возвращает

  • Массив[U8 val] iso^ ?

line

[Источник]

Возвращает строку, завершенную \n или \r\n, как строку. По умолчанию символ новой строки не включается в возвращаемую строку, но удаляется из буфера. Установите keep_line_breaks в true, чтобы сохранить символы перевода строки в возвращаемой строке.

fun ref line(
  keep_line_breaks: Bool val = false)
: String iso^ ?

Параметры

  • keep_line_breaks: Bool val = false

Возвращает

  • String iso^ ?

u8

[Источник]

Получает U8. Вызывает ошибку, если данных недостаточно.

fun ref u8()
: U8 val ?

Возвращает

  • U8 val ?

i8

[Источник]

Получает I8.

fun ref i8()
: I8 val ?

Возвращает

  • I8 val ?

u16_be

[Источник]

Получает 16-битовое целое число big-endian.

fun ref u16_be()
: U16 val ?

Возвращает

  • U16 val ?

u16_le

[Источник]

Получает 16-битовое целое число little-endian.

fun ref u16_le()
: U16 val ?

Возвращает

  • U16 val ?

i16_be

[Источник]

Получает 16-битовое целое число со знаком big-endian.

fun ref i16_be()
: I16 val ?

Возвращает

  • I16 val ?

i16_le

[Источник]

Получает 16-битовое целое число со знаком little-endian.

fun ref i16_le()
: I16 val ?

Возвращает

  • I16 val ?

u32_be

[Источник]

Получить U32 в формате big-endian.

fun ref u32_be()
: U32 val ?

Возвращает

  • U32 val ?

u32_le

[Source]

Получить U32 в формате little-endian.

fun ref u32_le()
: U32 val ?

Возвращает

  • U32 val ?

i32_be

[Source]

Получить I32 в формате big-endian.

fun ref i32_be()
: I32 val ?

Возвращает

  • I32 val ?

i32_le

[Source]

Получить I32 в формате little-endian.

fun ref i32_le()
: I32 val ?

Возвращает

  • I32 val ?

u64_be

[Source]

Получить U64 в формате big-endian.

fun ref u64_be()
: U64 val ?

Возвращает

  • U64 val ?

u64_le

[Source]

Получить U64 в формате little-endian.

fun ref u64_le()
: U64 val ?

Возвращает

  • U64 val ?

i64_be

[Source]

Получить I64 в формате big-endian.

fun ref i64_be()
: I64 val ?

Возвращает

  • I64 val ?

i64_le

[Source]

Получить I64 в формате little-endian.

fun ref i64_le()
: I64 val ?

Возвращает

  • I64 val ?

u128_be

[Source]

Получить U128 в формате big-endian.

fun ref u128_be()
: U128 val ?

Возвращает

  • U128 val ?

u128_le

[Source]

Получить U128 в формате little-endian.

fun ref u128_le()
: U128 val ?

Возвращает

  • U128 val ?

i128_be

[Source]

Получить I129 в формате big-endian.

fun ref i128_be()
: I128 val ?

Возвращает

  • I128 val ?

i128_le

[Source]

Получить I128 в формате little-endian.

fun ref i128_le()
: I128 val ?

Возвращает

  • I128 val ?

f32_be

[Source]

Получить F32 в формате big-endian.

fun ref f32_be()
: F32 val ?

Возвращает

  • F32 val ?

f32_le

[Source]

Получить F32 в формате little-endian.

fun ref f32_le()
: F32 val ?

Возвращает

  • F32 val ?

f64_be

[Source]

Получить F64 в формате big-endian.

fun ref f64_be()
: F64 val ?

Возвращает

  • F64 val ?

f64_le

[Source]

Получить F64 в формате little-endian.

fun ref f64_le()
: F64 val ?

Возвращает

  • F64 val ?

peek_u8

[Source]

Просмотреть U8 по заданному смещению. Поднять ошибку, если данных недостаточно.

fun box peek_u8(
  offset: USize val = 0)
: U8 val ?

Параметры

  • offset: USize val = 0

Возвращает

  • U8 val ?

peek_i8

[Source]

Просмотреть I8.

fun box peek_i8(
  offset: USize val = 0)
: I8 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I8 значение ?

peek_u16_be

[Источник]

Просмотр U16 в формате big-endian.

fun box peek_u16_be(
  offset: USize val = 0)
: U16 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U16 значение ?

peek_u16_le

[Источник]

Просмотр U16 в формате little-endian.

fun box peek_u16_le(
  offset: USize val = 0)
: U16 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U16 значение ?

peek_i16_be

[Источник]

Просмотр I16 в формате big-endian.

fun box peek_i16_be(
  offset: USize val = 0)
: I16 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I16 значение ?

peek_i16_le

[Источник]

Просмотр I16 в формате little-endian.

fun box peek_i16_le(
  offset: USize val = 0)
: I16 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I16 значение ?

peek_u32_be

[Источник]

Просмотр U32 в формате big-endian.

fun box peek_u32_be(
  offset: USize val = 0)
: U32 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U32 значение ?

peek_u32_le

[Источник]

Просмотр U32 в формате little-endian.

fun box peek_u32_le(
  offset: USize val = 0)
: U32 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U32 значение ?

peek_i32_be

[Источник]

Просмотр I32 в формате big-endian.

fun box peek_i32_be(
  offset: USize val = 0)
: I32 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I32 значение ?

peek_i32_le

[Источник]

Просмотр I32 в формате little-endian.

fun box peek_i32_le(
  offset: USize val = 0)
: I32 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I32 значение ?

peek_u64_be

[Источник]

Просмотр U64 в формате big-endian.

fun box peek_u64_be(
  offset: USize val = 0)
: U64 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U64 значение ?

peek_u64_le

[Источник]

Просмотр U64 в формате little-endian.

fun box peek_u64_le(
  offset: USize val = 0)
: U64 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U64 значение ?

peek_i64_be

[Источник]

Просмотр I64 в формате big-endian.

fun box peek_i64_be(
  offset: USize val = 0)
: I64 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I64 значение ?

peek_i64_le

[Источник]

Просмотр I64 в формате little-endian.

fun box peek_i64_le(
  offset: USize val = 0)
: I64 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I64 значение ?

peek_u128_be

[Источник]

Просмотр U128 в формате big-endian.

fun box peek_u128_be(
  offset: USize val = 0)
: U128 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U128 значение ?

peek_u128_le

[Источник]

Просмотр U128 в формате little-endian.

fun box peek_u128_le(
  offset: USize val = 0)
: U128 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • U128 значение ?

peek_i128_be

[Источник]

Просмотр I129 в формате big-endian.

fun box peek_i128_be(
  offset: USize val = 0)
: I128 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I128 значение ?

peek_i128_le

[Источник]

Просмотр I128 в формате little-endian.

fun box peek_i128_le(
  offset: USize val = 0)
: I128 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • I128 значение ?

peek_f32_be

[Источник]

Просмотр F32 в формате big-endian.

fun box peek_f32_be(
  offset: USize val = 0)
: F32 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • F32 значение ?

peek_f32_le

[Источник]

Просмотр F32 в формате little-endian.

fun box peek_f32_le(
  offset: USize val = 0)
: F32 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • F32 значение ?

peek_f64_be

[Источник]

Просмотр F64 в формате big-endian.

fun box peek_f64_be(
  offset: USize val = 0)
: F64 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • F64 значение ?

peek_f64_le

[Источник]

Просмотр F64 в формате little-endian.

fun box peek_f64_le(
  offset: USize val = 0)
: F64 val ?

Параметры

  • смещение: USize значение = 0

Возвращаемое значение

  • F64 значение ?

© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/buffered-Reader

Spec-Zone.ru

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