SERIALIZER/UNSERIALIZER

Estas clases proveen de un mecanismo para secuencializar datos y recuperarlos. Su uso principal es convertir informacion para ser almacenada en un archivo o enviada por algun canal secuencial.

Tipos soportados

Es posible serializar objetos de las siguientes clases:

La serialización no almacena información sobre los tipos de los elementos almacenados. Por lo tanto, al desrializar hay que conocer los tipos con que se serializó y extraer los datos en el mismo orden. De otro modo, el comportamiento es indefinido.

Portabilidad

Uno de los objetivos de estas clases es lograr que la representacion serial sea portable. La portabilidad se mantiene entre distintas plataformas siempre y cuando:

  1. Los INTEGER sean de 32 bits (lo que corresponde con el nuevo estándar de Eiffel). De no ser así, se puden enviar enteros de hasta 32 bits.
  2. Los REAL sean igual formato en ambas plataformas, de 32 bits (usualmente IEEE-754 single). Además en el caso de los REAL el endianness debe ser el mismo que los enteros en ambas plataformas, o distinto en ambas (en la mayoría es igual).
  3. Los CHARACTER deben ser de 8 bits, con el mismo juego de caracteres

SERIALIZER

Para usar el serializador se construye una entidad de tipo SERIALIZER2. Luego, se pueden ir serializando elementos con las operaciones add_integer, add_real, add_character, add_string, add_boolean. También puede usarse add_auto, en la que se detecta el tipo dinamicamente. Por ultimo, add_tuple recibe un ARRAY[ANY] que es tomado como una secuencia de objetos a serializar

Se puede consultar la serialización con el feature serialized_form. Para comenzar una nueva serialización puede usarse la operación `restart' (De otra forma, todo lo que se serializa va siendo acumulado).

UNSERIALIZER

La clase UNSERIALIZER opera sobre una cadena generada por SERIALIZER. El constructor (make, que es lo mismo que start) recibe la cadena a ser deserializada.

Luego, se llaman sucesivamente a las get_t (donde t es uno de los tipos soportados, en minúscula). Esta función avanza sobre la cadena y obtiene un objeto del tipo t, y la almacena en el feature last_t.

Los otros features para saber el estado de la serialización son `bytes_available' (La cantidad de caracteres aun sin decodificar), y unserializing que indica si el deserializador fue iniciado y quedan datos sin deserializar.

Se puede comenzar una nueva deserialización sin crear un objeto nuevo llamando a start.