Objetos fundamentais individuais não são normalmente serializados. No entanto, como um objeto instanciado possui objetos fundamentais, como todo o objeto é serializado, os objetos fundamentais também são serializados. Em C ++, todas as estruturas de dados, como o vetor, são classes predefinidas.
A serialização também é chamada de mareclamento. O oposto da serialização é a deserialização ou o solo. O objeto serializado como um arquivo do disco ou da rede pode ser convertido de volta (ressuscitado) no objeto no computador local para ser usado com o aplicativo C ++ local (programa).
Este artigo o orienta para entender melhor as bibliotecas de serialização do C ++ e como escrever sua própria biblioteca de serialização. Está focado no fluxo padrão serializado, JSON - veja abaixo.
Conteúdo do artigo
Binário e fluxo de texto
Binário
Diz -se que um programa C ++ compilado está em forma binária. Um fluxo serializado pode ser em forma binária. No entanto, este artigo não considerará objetos serializados binários.
Texto
O fluxo serializado pode estar em forma de texto. Dois padrões de texto usados hoje são JSON e XML. É mais fácil entender e lidar com JSON do que entender e lidar com XML. Então JSON é usado neste artigo.
Objetivos principais
Os principais objetivos da serialização são que o fluxo serializado deve ser compatível com antecedência e para o futuro compatível. Também deve ser possível ser usado em diferentes sistemas operacionais e diferentes arquiteturas de computador.
Versão
Suponha que você escreveu um programa e o enviou para um cliente, e o cliente está satisfeito. Está bem. Mais tarde, o cliente precisa de modificação. No entanto, hoje, o cliente empregou seu próprio programador. O programador pede que você adicione outra propriedade (membro de dados) a uma classe e envie os objetivos correspondentes através da rede. Ele pretende se encaixar no objeto no programa; Quando você faz isso, o fluxo serializado terá que ser compatível com o objeto antigo.
A especificação de C ++ e outros idiomas mudam ao longo do tempo. Em algumas especificações, você é informado de algumas das mudanças que ocorrerão nas especificações seguintes e futuras. Normalmente não é possível informá -lo de todas as mudanças que acontecerão. Portanto, seu fluxo serializado deve ser compatível com antecedência, desde que essas novas mudanças futuras estejam preocupadas. A compatibilidade avançada tem seus limites porque nem todas as mudanças futuras podem ser determinadas.
A compatibilidade para frente e para trás é tratada pelo esquema chamado versão.
JSON Stream
JSON significa notação de objeto JavaScript.
JSON é um formato de texto para armazenar e transportar dados.
JSON é "auto-descrição".
O JSON também é um padrão antigo e, portanto, se adequa bem à serialização do texto C ++. Então, para enviar um objeto instanciado C ++, converta -o em um objeto JSON e envie. Pouco antes de o objeto JSON ser enviado, ele é chamado de fluxo. Quando um objeto JSON é recebido em sua sequência, ele ainda é chamado de riacho para deserivação.
Sintaxe JSON
Com JSON, um dado é um par de chaves/valor. Por exemplo, em
"Nome": "Smith"nome é uma chave, e Smith é o valor. Um objeto é delimitado por aparelhos, como em:
"Nome": "Smith", "Height": 1.7Os dados são separados por vírgulas. Qualquer texto, seja uma chave ou um valor, deve estar em duplas. Os números são escritos sem cotações.
Uma matriz é delimitada por colchetes como em:
["Orange", "Banana", "Pear", "Lemon"]No código a seguir, há um dado cujo valor é uma matriz e identificado pelo ARR
"arr": ["laranja", "banana", "pêra", "limão"]Nota: Os objetos podem ser aninhados em JSON e, com isso, os objetos podem ser identificados.
Valor de dados JSON
O Valor JSON de Datum JSON é:
Uma data de C ++ ou qualquer outro objeto que não esteja nesta lista deve ser convertido em uma string literal para se tornar um valor JSON.
Comparando objetos C ++ e JSON
A seguir, é apresentado um programa C ++ simples com um objeto simples, do construtor padrão:
#incluir
usando namespace std;
CLASSE THECLA
público:
int num;
int mthd (int it)
devolver;
;
int main ()
Thecla obj;
int no = obj.MTHD (3);
cout << no << endl;
retornar 0;
O objeto JSON equivalente é o seguinte:
"obj": "num": null, "mthd": "int mthd (int it) return It;"Um objeto JSON é, por definição, serializado.
Observe como o nome do objeto foi indicado. Além disso, observe como o nome da função foi indicado. No final do recebimento, o programa C ++ para a deserivização terá que convertê -lo em uma classe e objeto C ++ e depois compilar. O programa também terá que reconhecer a função em forma de string, remover as citações duplas e ter a função como texto antes de compilar.
Para facilitar isso, os metadados devem ser enviados. Metadados são dados sobre dados. Um mapa C ++ com os metadados pode ser enviado. Um mapa é um objeto C ++, que terá que ser convertido em um objeto JSON. Será enviado, seguido pelo objeto de interesse JSON.
O objeto JSON é um objeto de fluxo. Depois de preparado, ele deve ser enviado ao objeto C ++ Ostream a ser salvo como um arquivo ou enviado pela rede. No computador receptor, o C ++ ISTREAM receberá a sequência. Em seguida, será tomado pelo programa de deserialização que reproduzirá o objeto em formato C ++. Ostream e istream são objetos de C ++ FStream.
NOTA: Em JavaScript (ECMAScript), a serialização é chamada, rigificar e deserialização é chamado de análise.
Objeto JSON e objeto JavaScript
Objeto JSON e objeto JavaScript são semelhantes. O objeto JavaScript tem menos restrições do que o objeto JSON. O objeto JSON foi projetado a partir do objeto JavaScript, mas hoje pode ser usado por muitas outras linguagens do computador. JSON é o arquivo mais comum (sequência serializada) usada para enviar dados entre os servidores da Web e seus clientes. As bibliotecas C ++ usam JSON, mas nenhuma delas satisfaz a maioria dos objetivos de produzir um arquivo para C++.
Nota: Em JavaScript, uma função não é uma string. Qualquer função recebida como uma string é convertida em uma função de sintaxe normal.
Mais para saber
Além de conhecer o exposto acima, a fim de produzir uma biblioteca de serialização ou desserialização por si mesmo, você também deve saber:
Conclusão
A serialização converte um objeto em um fluxo de bytes a ser armazenado no disco ou enviado para outro computador através de uma rede. Desserialização é o processo revertido para o fluxo serializado, que é chamado de arquivo.
Objetos fundamentais e objetos instantados podem ser serializados. Objetos fundamentais únicos são dificilmente serializados. No entanto, como um objeto instanciado possui objetos fundamentais, objetos fundamentais são serializados ao lado de todo.
A serialização tem uma desvantagem de que expõe membros particulares do objeto C ++. Este problema pode ser resolvido fazendo serialização em binário. Com o texto, os metadados podem ser enviados para indicar os membros privados; Mas o programador do outro lado ainda pode conhecer os membros particulares.
Você já deve ter salvado no disco ou enviado um programa binário ou de código -fonte através do email, e pode estar se perguntando: por que salvar ou enviar apenas o objeto. Bem, em C ++, você pode ter percebido que toda uma biblioteca pode consistir em apenas uma classe, possivelmente com alguma herança. A classe pode ser mais longa do que muitos programas curtos de C ++. Portanto, um motivo para enviar objetos é porque alguns objetos são muito grandes. A programação orientada a objetos (OOP) envolve a interação de objetos, semelhante a como animais, plantas e ferramentas interagem. Outro motivo é que o OOP está melhorando e os programadores preferem lidar com objetos do que todo o aplicativo, o que pode ser muito grande.
C ++ ainda não possui um formato de arquivo padrão para texto ou binário, embora existam bibliotecas de serialização para serialização e deserialização de C ++. Nenhum deles é realmente satisfatório. O formato de arquivo de texto para JavaScript é JSON. JSON pode ser usado com qualquer linguagem de computador. Portanto, com o guia acima, você poderá produzir sua própria biblioteca para o marechaling C ++ e o UNARSHALLING.