CodeGym /Blogue Java /Random-PT /Formatos de serialização Java
John Squirrels
Nível 41
San Francisco

Formatos de serialização Java

Publicado no grupo Random-PT
Oi! Vamos falar sobre serialização. Você provavelmente se lembra que já tivemos aulas sobre serialização. E assim fizemos :) Aqui está o primeiro E aqui está o segundo. Se você não se lembra bem como a serialização funciona, por que a serialização é necessária e quais ferramentas o Java possui para serialização, você pode executar estas lições. A aula de hoje será sobre teoria. Vamos dar uma olhada mais de perto nos formatos de serialização. Primeiro, vamos relembrar o que é serialização. A serialização é o processo de armazenar o estado de um objeto em uma sequência de bytes. A desserialização é o processo de restauração de um objeto desses bytes. Um objeto Java pode ser serializado e enviado por uma rede (por exemplo, para outro computador). A sequência de bytes pode ser representada em diferentes formatos. Você está familiarizado com este conceito do uso comum do computador. Por exemplo, um livro eletrônico (ou um simples documento de texto) pode ser escrito em vários formatos diferentes:
  • docx (formato Microsoft Word);
  • pdf (formato Adobe);
  • mobi (comumente usado em dispositivos Amazon Kindle);
  • e muito mais (ePub, djvu, fb2, etc.).
Em cada caso, o objetivo parece ser o mesmo: apresentar o texto de forma legível por humanos. Ainda assim, as pessoas inventaram muitos formatos diferentes. Sem entrar nos detalhes de seu trabalho, podemos supor que eles tinham boas razões. Cada formato tem suas próprias vantagens e desvantagens em relação aos demais. Talvez vários formatos de serialização tenham sido criados seguindo esses mesmos princípios? Excelente palpite, estudante! :) Isso mesmo. A realidade é que enviar dados por fio (ou sem fio) é um negócio complicado e envolve muitos fatores. Quem está enviando os dados? Para onde? Qual volume? O destinatário será um ser humano ou um computador (ou seja, os dados devem ser legíveis por humanos)? Qual dispositivo lerá os dados? Obviamente, essas situações são diferentes. Uma coisa é enviar uma imagem de 500 KB de um smartphone para outro. E é uma coisa completamente diferente se estivermos falando de 500 terabytes de dados de negócios que devem ser compactados de maneira ideal e enviados o mais rápido possível. Vamos conhecer os principais formatos de serialização e analisar as vantagens e desvantagens de cada um deles!

JSON

Notação de objeto JavaScript. Você já conhece um pouco desse formato! Falamos sobre isso nesta lição e cobrimos a serialização em JSON aqui . Ele recebeu esse nome por um motivo. Objetos Java convertidos em JSON realmente se parecem exatamente com objetos em JavaScript. Você não precisa conhecer JavaScript para entender nosso objeto:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Não nos limitamos a enviar um único objeto. O formato JSON também pode representar uma matriz de objetos:

[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Como JSON representa objetos JavaScript, ele suporta os seguintes formatos de dados JavaScript:
  • cordas;
  • números;
  • objetos;
  • matrizes;
  • booleanos (verdadeiro e falso);
  • nulo.
Quais são os benefícios do JSON?
  1. Formato legível por humanos. Esta é uma vantagem óbvia se o usuário final for humano. Por exemplo, suponha que seu servidor tenha um banco de dados com uma programação de voos. Um cliente humano, sentado em seu computador em casa, solicita dados desse banco de dados usando um aplicativo da web. Como você precisa fornecer dados em um formato que ele possa entender, o JSON é uma ótima solução.

  2. Simplicidade. É super simples :) Acima, demos um exemplo de dois arquivos JSON. E mesmo que você nunca tenha ouvido falar sobre JavaScript (e muito menos sobre objetos JavaScript), você pode entender facilmente o tipo de objetos descritos lá.
    Toda a documentação do JSON consiste em uma página da Web com algumas fotos.

  3. Uso muito difundido. JavaScript é a linguagem de front-end dominante e tem seus próprios requisitos. Usar JSON é obrigatório. Portanto, um grande número de serviços da Web usa JSON como formato de troca de dados. Todo IDE moderno suporta o formato JSON (incluindo IntelliJ IDEA). Várias bibliotecas foram escritas para todos os tipos de linguagens de programação para permitir o trabalho com JSON.

Por exemplo, você já trabalhou com a biblioteca Jackson em uma lição onde aprendemos a serializar objetos Java em JSON. Mas além de Jackson, temos, por exemplo, GSON , que é uma biblioteca muito conveniente do Google.

YAML

Inicialmente, YAML significava "Yet Another Markup Language". Quando começou, posicionava-se como concorrente do XML. Agora, com o passar do tempo, YAML passou a significar "YAML não é linguagem de marcação". O que é isso exatamente? Vamos imaginar que precisamos criar 3 classes para representar personagens em um jogo de computador: Guerreiro, Mago e Ladrão. Eles terão as seguintes características: força, agilidade, resistência, um conjunto de armas. Veja como seria um arquivo YAML descrevendo nossas classes:

classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear
    
 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
Um arquivo YAML possui uma estrutura em árvore: alguns elementos são aninhados em outros. Podemos controlar o aninhamento usando um certo número de espaços, que usamos para denotar cada nível. Quais são as vantagens do formato YAML?
  1. Legível por humanos. Novamente, mesmo vendo um arquivo YAML sem uma descrição, você pode entender facilmente os objetos que ele descreve. YAML é tão legível que o site yaml.org é um arquivo YAML comum :)

  2. Compacidade. A estrutura do arquivo é criada usando espaços: não há necessidade de usar colchetes ou aspas.

  3. Suporte para estruturas de dados nativas para linguagens de programação. A grande vantagem do YAML sobre o JSON e muitos outros formatos é que ele oferece suporte a várias estruturas de dados. Eles incluem:

    • !!map
      Um conjunto não ordenado de pares chave-valor que não podem ter duplicatas;

    • !!omap
      Uma sequência ordenada de pares chave-valor que não podem ter duplicatas;

    • !!pairs:
      Uma sequência ordenada de pares chave-valor que podem ter duplicatas;

    • !!set
      Uma sequência não ordenada de valores que não são iguais entre si;

    • !!seq
      Uma sequência de valores arbitrários;

    Você reconhecerá algumas dessas estruturas de Java! :) Isso significa que várias estruturas de dados de linguagens de programação podem ser serializadas em YAML.

  4. Capacidade de usar âncora e alias

    Esses marcadores permitem identificar algum elemento em um arquivo YAML e, em seguida, fazer referência a ele no restante do arquivo, caso ocorra repetidamente. Uma âncora é criada usando o símbolo & , e um alias é criado usando * .

    Suponha que tenhamos um arquivo descrevendo os livros de Leo Tolstoi. Para evitar escrever o nome do autor para cada livro, simplesmente criamos a âncora leo e nos referimos a ela usando um pseudônimo quando precisamos:

    
    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859
    

    Quando este arquivo é analisado, o valor "Leo Tolstoy" é substituído nos lugares certos onde temos nossos aliases.

  5. YAML pode incorporar dados em outros formatos. Por exemplo, JSON:

    
    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]
    

Outros formatos de serialização

XML

Este formato é baseado em uma árvore de tags.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Cada elemento consiste em uma tag de abertura e fechamento (<> e </>). Cada elemento pode ter elementos aninhados. XML é um formato comum tão bom quanto JSON e YAML (se estivermos falando de projetos reais). Temos uma lição separada sobre XML .

BSON (JSON binário)

Como o próprio nome indica, o BSON é muito semelhante ao JSON, mas não é legível por humanos e usa dados binários. Como resultado, é muito bom para armazenar e transferir imagens e outros anexos. Além disso, o BSON suporta alguns tipos de dados não disponíveis no JSON. Por exemplo, um arquivo BSON pode incluir uma data (no formato de milissegundos) ou até mesmo um trecho de código JavaScript. O popular banco de dados MongoDB NoSQL armazena informações no formato BSON.

Protocolo baseado em posição

Em algumas situações, precisamos reduzir drasticamente a quantidade de dados enviados (por exemplo, se tivermos muitos dados e precisarmos reduzir a carga). Nesta situação, podemos usar o protocolo baseado em posição, ou seja, enviar valores de parâmetros sem os nomes dos próprios parâmetros.

"Leo Tolstoy" | "Anna Karenina" | 1873
Os dados neste formato ocupam várias vezes menos espaço do que um arquivo JSON completo. Claro, existem outros formatos de serialização, mas você não precisa saber todos eles agora :) É bom se você estiver familiarizado com os atuais formatos padrão da indústria ao desenvolver aplicativos e lembrar de suas vantagens e como eles diferem de um outro. E com isso nossa aula chega ao fim :) Não se esqueça de resolver algumas tarefas hoje! Até a próxima vez! :)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION