Writer
Буфер для построения сообщений.
Writer предоставляет способ создания последовательностей байтов с помощью стандартных кодировок данных. Writer управляет базовыми массивами и размерами. Это полезно для кодирования данных для отправки по сети или сохранения в файле. После построения сообщения вы можете вызвать done() для получения ByteSeq сообщения, а затем повторно использовать Writer для создания нового сообщения.
Например, предположим, что у нас есть сетевой протокол на основе TCP, где сообщения состоят из следующего:
-
message_length- количество байтов в сообщении как 32-битное целое число в формате big-endian -
list_size- количество элементов в следующем списке элементов как 32-битное целое число в формате big-endian - ноль или более элементов следующих данных:
- 64-битное число с плавающей точкой в формате big-endian
- строка, начинающаяся с 32-битного целого числа в формате big-endian, указывающего длину строки, за которым следует количество байтов, представляющих строку
Сообщение будет выглядеть примерно так:
[message_length][list_size][float1][string1][float2][string2]...
Следующая программа использует буфер записи для кодирования массива кортежей в виде сообщения этого типа:
use "buffered"
actor Main
new create(env: Env) =>
let wb = Writer
let messages = [[(F32(3597.82), "Anderson"); (F32(-7979.3), "Graham")]
[(F32(3.14159), "Hopper"); (F32(-83.83), "Jones")]]
for items in messages.values() do
wb.i32_be((items.size() / 2).i32())
for (f, s) in items.values() do
wb.f32_be(f)
wb.i32_be(s.size().i32())
wb.write(s.array())
end
let wb_msg = Writer
wb_msg.i32_be(wb.size().i32())
wb_msg.writev(wb.done())
env.out.writev(wb_msg.done())
end
class ref Writer
Конструкторы
create
new iso create() : Writer iso^
Возвращает
- Writer iso^
Открытые функции
reserve_chunks
Зарезервировать место для блоков размером size'.
Это необходимо вызывать после каждого вызова done, так как done сбрасывает блоки.
fun ref reserve_chunks( size': USize val) : None val
Параметры
- size': USize значение
Возвращает
- None значение
reserve_current
Зарезервировать место для size байт в _current.
fun ref reserve_current( size': USize val) : None val
Параметры
- size': USize значение
Возвращает
- None значение
size
fun box size() : USize val
Возвращает
- USize значение
u8
Записать байт в буфер.
fun ref u8( data: U8 val) : None val
Параметры
- data: U8 значение
Возвращает
- None значение
u16_le
Записать U16 в буфер в порядке байтов little-endian.
fun ref u16_le( data: U16 val) : None val
Параметры
- data: U16 значение
Возвращает
- None значение
u16_be
Записать U16 в буфер в порядке байтов big-endian.
fun ref u16_be( data: U16 val) : None val
Параметры
- data: U16 значение
Возвращает
- None значение
i16_le
Записать I16 в буфер в порядке байтов little-endian.
fun ref i16_le( data: I16 val) : None val
Параметры
- data: I16 значение
Возвращает
- None значение
i16_be
Записать I16 в буфер в порядке байтов big-endian.
fun ref i16_be( data: I16 val) : None val
Параметры
- data: I16 значение
Возвращает
- None значение
u32_le
Записать U32 в буфер в порядке байтов little-endian.
fun ref u32_le( data: U32 val) : None val
Параметры
- data: U32 значение
Возвращает
- None значение
u32_be
Записать U32 в буфер в порядке байтов big-endian.
fun ref u32_be( data: U32 val) : None val
Параметры
- data: U32 значение
Возвращает
- None значение
i32_le
Записать I32 в буфер в порядке байтов little-endian.
fun ref i32_le( data: I32 val) : None val
Параметры
- data: I32 значение
Возвращает
- None значение
i32_be
Записать I32 в буфер в порядке байтов big-endian.
fun ref i32_be( data: I32 val) : None val
Параметры
- data: I32 значение
Возвращает
- None значение
f32_le
Записать F32 в буфер в порядке байтов little-endian.
fun ref f32_le( data: F32 val) : None val
Параметры
- data: F32 значение
Возвращает
- None значение
f32_be
Записать F32 в буфер в порядке байтов big-endian.
fun ref f32_be( data: F32 val) : None val
Параметры
- data: F32 значение
Возвращает
- None значение
u64_le
Записать U64 в буфер в порядке байтов little-endian.
fun ref u64_le( data: U64 val) : None val
Параметры
- data: U64 значение
Возвращает
- None значение
u64_be
Записать U64 в буфер в порядке байтов big-endian.
fun ref u64_be( data: U64 val) : None val
Параметры
- data: U64 значение
Возвращает
- None значение
i64_le
Записать I64 в буфер в порядке байтов little-endian.
fun ref i64_le( data: I64 val) : None val
Параметры
- data: I64 значение
Возвращает
- None значение
i64_be
Записать I64 в буфер в порядке байтов big-endian.
fun ref i64_be( data: I64 val) : None val
Параметры
- data: I64 значение
Возвращает
- None значение
f64_le
Записать F64 в буфер в порядке байтов little-endian.
fun ref f64_le( data: F64 val) : None val
Параметры
- data: F64 значение
Возвращает
- None значение
f64_be
Записать F64 в буфер в порядке байтов big-endian.
fun ref f64_be( data: F64 val) : None val
Параметры
- data: F64 значение
Возвращает
- None значение
u128_le
Записать U128 в буфер в порядке байтов little-endian.
fun ref u128_le( data: U128 val) : None val
Параметры
- data: U128 значение
Возвращает
- None значение
u128_be
Записать U128 в буфер в порядке байтов big-endian.
fun ref u128_be( data: U128 val) : None val
Параметры
- data: U128 значение
Возвращает
- None значение
i128_le
Записать I128 в буфер в порядке байтов little-endian.
fun ref i128_le( data: I128 val) : None val
Параметры
- data: I128 значение
Возвращает
- None значение
i128_be
Записать I128 в буфер в порядке байтов big-endian.
fun ref i128_be( data: I128 val) : None val
Параметры
- data: I128 значение
Возвращает
- None значение
write
Записать ByteSeq в буфер.
fun ref write( data: (String val | Array[U8 val] val)) : None val
Параметры
Возвращаемое значение
- None val
writev
Записать ByteSeq в буфер.
fun ref writev( data: ByteSeqIter val) : None val
Параметры
- данные: ByteSeqIter val
Возвращаемое значение
- None val
done
Возвращает массив буферизованных ByteSeq и сбрасывает буфер Writer.
fun ref done() : Array[(String val | Array[U8 val] val)] iso^
Возвращаемое значение
© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/buffered-Writer