lunes, 19 de noviembre de 2018

BinaryMessage

Si necesita serializar datos en formato binario, BinaryMessage puede ayudar.

En computación, serialización es el proceso de convertir datos abstractos en datos almacenados (en forma persistente) o datos para trasmitirlos a otro destino (servidor de red o dispositivo).

He diseñado BinaryMessage basándome en productos como protocol-buffersmsgpack; debido a la necesidad de trasmitir datos en un producto que estoy terminando, esremo, necesitaba serializar, trasmitir y de-serializar datos al recibirlos de una forma lo más automática posible.

Tal vez pueden pensar, "hey!, para que crear la rueda si ya hay xml o json?". Pues a parte de javascript que tiene un tipo de datos json, en todos los demás lenguajes hay unas clases para manejar XML o JSON, por lo general, creamos clases para manejar datos y queremos que esas clases las podamos serializar y con XML o JSON tenemos que "mapearlas" a esos tipos de objetos.

Además el tamaño de los objetos serializados son menores, pero, y por que no comprime los datos? Cuando los datos son pequeños (como los mensajes de un chat) los datos comprimidos son mayores a los datos originales. Y cuando los productos que brindamos están en servicios en la nube donde cobran el ancho de banda de entrada/salida, los bytes cuentan!

Otro punto es utilizar el editor para ayudarnos con auto-completado ya que son propiedades de clases y con XML y JSON no podemos usar auto-completar a propiedades.

Aunque he diseñado BinaryMessage (como los otros productos) para que sea plataforma-neutral (que se pueda usar en cualquier plataforma, Win, MacOS, Linux, raspberry-Pi) y lenguaje-neutral (c, c++, etc) en este momento la especificación es open y está codificado en Xojo.

Para usar BinaryMessage una clase (si no es creada con el compilador o usando la clase BinaryMessage.Parser) debe heredarse de BinaryMessage.Message adicionar attributos y usar .WriteTo a un MemoryBlock/BinaryStream para serializar y utilizar .ReadFrom desde un MemoryBlock/BinaryStream para de-serializar.


Ejemplo serializar:

Dim john As New People
john.id= 5
john.name= "John Do€"
john.email= "john@server.com"
john.address= Array("1600 Pennsylvania Avenue", "935 Pennsylvania Avenue")

Dim phone1 As New PhoneNumber
phone1.number= "123 4567"
phone1.type= 1
phone1.flags= Array(4900000000, 5000000000, 80000000000)
john.phones.Append phone1

Dim phone2 As New PhoneNumber
phone2.number= "555 5555"
phone2.type= 2
john.phones.Append phone2

Dim phone3 As New PhoneNumber
phone3.number= "999 5555"
phone3.type= 3
john.phoneX= phone3

Dim prefs As New Dictionary
prefs.Value("one")= 1
prefs.Value(2)= "two"
prefs.Value("three")= True
prefs.Value(3.5)= 49098236671
john.prefs= prefs

mbMessage= New MemoryBlock(0)

john.WriteTo mbMessage


Ejemplo de-serializar:


BinaryMessage.Message.RegisterClass GetTypeInfo(PhoneNumber)

Dim john As New People
john.ReadFrom mbMessage


Si desea más información sobre la especificación o desea probar BinaryMessage, por favor comente o escríbame.

Hasta la próxima.



No hay comentarios:

Publicar un comentario