1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yomorun-y3-codec-golang

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Y3

Версия: draft-02.
Статус: WIP.

简体中文 | English

Y3

Y3 — это реализация на Golang Y3 Codec, который представляет собой быстрый и низкозатратный по ресурсам процессорный кодировщик и декодировщик данных, ориентированный на периферийные вычисления и потоковую обработку.

Дополнительную информацию можно найти в разделе explainer и о способах комбинирования с YoMo.

Y3 Codec

См. Y3 Codec SPEC.

Тест

go test ./....

Использование

go get -u github.com/yomorun/y3-codec-golang.

Примеры

Примеры кодирования

package main

import (
	"fmt"
	y3 "github.com/yomorun/y3-codec-golang"
)

func main() {
	// если мы хотим представить `var obj = &foo{ID: -1, bar: &bar{Name: "C"}}` 
	// в Y3-Codec:

	// 0x81 -> узел
	var foo = y3.NewNodePacketEncoder(0x01)

	// 0x02 -> foo.ID=-11
	var yp1 = y3.NewPrimitivePacketEncoder(0x02)
	yp1.SetInt32Value(-1)
	foo.AddPrimitivePacket(yp1)

	// 0x83 -> &bar{}
	var bar = y3.NewNodePacketEncoder(0x03)

	// 0x04 -> bar.Name="C"
	var yp2 = y3.NewPrimitivePacketEncoder(0x04)
	yp2.SetStringValue("C")
	bar.AddPrimitivePacket(yp2)
	
	// -> foo.bar=&bar
	foo.AddNodePacket(bar)

	fmt.Printf("res=%#v", foo.Encode()) // res=[]byte{0x81, 0x08, 0x02, 0x01, 0x7F, 0x83, 0x03, 0x04, 0x01, 0x43}
}

Примеры декодирования 1: декодирование примитивного пакета

package main

import (
	"fmt"
	y3 "github.com/yomorun/y3-codec-golang"
)

func main() {
	fmt.Println(">> Разбор [0x0A, 0x01, 0x7F], что похоже на формат Ключ-Значение = 0x0A: 127")
	buf := []byte{0x0A, 0x01, 0x7F}
	res, _, err := y3.DecodePrimitivePacket(buf)
	v1, err := res.ToUInt32()
	if err != nil {
		panic(err)
	}

	fmt.Printf("Tag Key=[%#X], Value=%v\n", res.SeqID(), v1)
}

Примеры декодирования 2: декодирование узла пакета

package main

import (
	"fmt"
	y3 "github.com/yomorun/y3-codec-golang"
)

func main() {
	fmt.Println(">> Разбор [0x84, 0x06, 0x0A, 0x01, 0x7F, 0x0B, 0x01, 0x43] ЭКВИВАЛЕНТ JSON= 0x84: { 0x0A: -1, 0x0B: 'C' }")
	buf := []byte{0x84, 0x06, 0x0A, 0x01, 0x7F, 0x0B, 0x01, 0x43}
	res, _, err := y3.DecodeNodePacket(buf)
	v1 := res.PrimitivePackets[0]

	p1, err := v1.ToInt32()
	if err != nil {
		panic(err)
	}
	fmt.Printf("Tag Key=[%#X.%#X], Value=%v\n", res.SeqID(), v1.SeqID(), p1)

	v2 := res.PrimitivePackets[1]

	p2, err := v2.ToUTF8String()
	if err != nil {
		panic(err)
	}

	fmt.Printf("Tag Key=[%#X.%#X], Value=%v\n", res.SeqID(), v2.SeqID(), p2)
}

Дополнительные примеры в /examples/

Участники

Лицензия

FOSSA Status

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Y3 — это реализация Golang для yomo-codec, правил кодирования и декодирования данных, ориентированная на область интернета вещей (IoT). Цель Y3 заключается в обеспечении возможности быстрого анализа на устройствах с низким энергопотреблением и максимально возможном снижении потребления ресурсов процессора. В основе дизайна лежит Binary, использу... Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yomorun-y3-codec-golang.git
git@api.gitlife.ru:oschina-mirror/yomorun-y3-codec-golang.git
oschina-mirror
yomorun-y3-codec-golang
yomorun-y3-codec-golang
master