JavaRush /Blogue Java /Random-PT /Formatos de serialização em Java

Formatos de serialização em Java

Publicado no grupo Random-PT
Olá! Vamos falar sobre serialização em Java. Você provavelmente se lembra que já tivemos palestras sobre serialização. Isso mesmo :) Aqui está o primeiro E aqui está o segundo Se você não se lembra muito bem como funciona a serialização, por que ela é necessária e quais ferramentas existem para isso em Java, você pode dar uma olhada nessas palestras. A palestra de hoje será teórica e nela veremos mais de perto os formatos de serialização. Formatos de serialização em Java - 1Primeiro, vamos lembrar o que é serialização. Serialização é o processo de armazenar o estado de um objeto em uma sequência de bytes. A desserialização é o processo de reconstrução de um objeto a partir desses bytes. Um objeto Java pode ser serializado e transferido por uma rede (por exemplo, para outro computador). Assim, esta mesma sequência de bytes pode ser representada em diferentes formatos. Você está familiarizado com isso pelo uso diário do computador. Por exemplo, o e-book (ou documento de texto simples) que você está lendo 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...).
Parece que a tarefa é a mesma: apresentar o texto de uma forma legível. Mas as pessoas inventaram vários formatos. Mesmo sem entrar em detalhes do seu trabalho, podemos supor que isso foi feito por um motivo. Cada um deles provavelmente tem suas próprias vantagens e desvantagens em relação aos outros. Talvez os formatos de serialização tenham sido criados de acordo com o mesmo princípio? Bem, bom palpite, estudante! :) Do jeito que é. O fato é que transmitir dados à distância é algo bastante delicado e envolve muitos fatores. Quem transmite os dados? Onde? Qual volume? A parte receptora será uma pessoa ou uma máquina (ou seja, os dados deverão ser legíveis por humanos)? Que tipo de dispositivo irá ler os dados? Obviamente, as situações são diferentes. Uma coisa é quando você precisa transferir uma imagem de 500 KB de um smartphone para outro. E é completamente diferente quando falamos de 500 terabytes de dados empresariais que precisam ser compactados da forma mais eficiente possível e, ao mesmo tempo, transferidos o mais rápido possível. Vamos dar uma olhada nos principais formatos de serialização e ver as vantagens e desvantagens de cada um!

JSON

Notação de objeto JavaScript. Você já está um pouco familiarizado com ele! Falamos sobre isso nesta palestra e analisamos a serialização em JSON aqui . Recebeu esse nome por um motivo. Os objetos Java convertidos em JSON se parecem exatamente com os objetos JavaScript. Você não precisa saber JavaScript para entender o significado do nosso objeto:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Não é necessário passar um objeto. JSON também pode conter uma matriz de objetos:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Como JSON é um objeto JavaScript, ele oferece suporte aos seguintes formatos de dados JavaScript:
  • cordas;
  • números (número);
  • objetos (objeto);
  • matrizes (matriz);
  • valores booleanos (verdadeiro e falso);
  • nulo.
Quais vantagens o JSON tem?
  1. Formato legível por humanos. Esta é uma vantagem óbvia se o seu usuário final for humano. Por exemplo, seu servidor armazena um banco de dados com horários de voos. Um cliente humano solicita dados desse banco de dados usando um aplicativo da web enquanto está sentado em casa, diante de um computador. Como você precisa fornecer os dados em um formato que ele possa entender, JSON é uma ótima solução.

  2. Simplicidade. Você poderia dizer que é elementar :) Acima demos um exemplo de dois arquivos JSON. E mesmo que você nunca tenha ouvido falar da existência de JavaScript (muito menos de seus objetos), você pode entender facilmente que tipo de objetos estão descritos lá.
    Toda a documentação JSON é uma página da web com algumas fotos.

  3. Difundido. JavaScript é a linguagem front-end dominante e dita seus termos. Usar JSON é obrigatório. Portanto, um grande número de serviços da web usa JSON como formato para troca de dados. Todo IDE moderno oferece suporte ao formato JSON (incluindo Intellij IDEA). Várias bibliotecas foram escritas para trabalhar com JSON para todas as linguagens de programação possíveis.

Por exemplo, você já trabalhou com a biblioteca Jackson na palestra onde aprendemos a serializar objetos Java em JSON. Mas além de Jackson existe, por exemplo, GSON - uma biblioteca muito conveniente do Google.

YAML

No início de sua existência, significava Yet Another Markup Language - “outra linguagem de marcação”. Na época foi posicionado como concorrente do XML. Agora, com o passar do tempo, significa “YAML Ain't Markup Language” (“YAML não é uma linguagem de marcação”). Como ele é? Vamos imaginar que precisamos criar 3 classes de personagens para nosso jogo de computador: Guerreiro, Mago e Ladrão. Eles terão as seguintes características: força, agilidade, resistência e conjunto de armas. Esta é a aparência do nosso arquivo YAML com descrições de classe:
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
O arquivo YAML possui uma estrutura em árvore: alguns elementos estão aninhados em outros. Podemos controlar o aninhamento usando um certo número de espaços para denotar cada nível. Quais vantagens o formato YAML tem?
  1. Legível por humanos. Novamente, mesmo se você vir um arquivo yaml sem descrição, poderá entender facilmente quais objetos estão descritos nele. YAML é o quão legível por humanos é que a página principal do yaml.org é um arquivo yaml normal :)

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

  3. Suporte para estruturas de dados nativas de linguagens de programação. Uma grande vantagem do YAML sobre o JSON e muitos outros formatos é que ele oferece suporte a diferentes estruturas de dados. Entre eles:

    • !!map
      Uma coleção não ordenada de pares chave:valor sem possibilidade de duplicatas;

    • !!omap
      Uma sequência ordenada de pares chave:valor sem possibilidade de duplicatas;

    • !!pairs:
      Uma sequência ordenada de pares chave:valor com possibilidade de duplicatas;

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

    • !!seq
      Sequência de valores arbitrários;

    Algumas dessas estruturas serão familiares para você em Java! :) Graças a esse recurso, você pode serializar várias estruturas de dados de linguagens de programação no formato YAML.

  4. Capacidade de usar âncora e alias

    Tradução das palavras “âncora” e “alias” - “âncora” e “pseudônimo”. Em princípio, descreve com bastante precisão a essência desses termos em YAML.

    Eles permitem que você identifique um elemento em um arquivo yaml e faça referência a ele no restante do arquivo se ocorrer repetidamente. A âncora é criada usando o símbolo &e o alias é criado usando *.

    Digamos que temos um arquivo com descrições dos livros de Leo Tolstoy. Para evitar escrever o nome do autor manualmente todas as vezes, simplesmente criaremos uma âncora “leo” e nos referiremos a ela usando um alias quando precisarmos:

    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 lemos este arquivo com algum analisador, o valor “Leo Tolstoy” será substituído nos lugares certos no lugar do nosso alias.

  5. Você pode incorporar dados em outros formatos em YAML. 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 na chamada á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 que não é inferior a JSON e YAML (se falarmos sobre uso em projetos reais). Temos uma palestra separada sobre XML .

BSON (JSON binário)

Como o próprio nome sugere, é muito semelhante ao JSON, mas não é legível por humanos e opera com dados em formato binário. Isso o torna muito conveniente para armazenar e transferir imagens e outros anexos. Além disso, o BSON oferece suporte a alguns tipos de dados que não estão disponíveis em JSON. Por exemplo, você pode escrever uma data (no formato de milissegundos) ou até mesmo um trecho de código JavaScript em um arquivo BSON. O popular banco de dados NoSQL MongoDB armazena informações no formato BSON.

Protocolo baseado em posição

Em algumas situações, precisamos reduzir drasticamente a quantidade de dados transferidos (por exemplo, se houver muitos dados e precisarmos reduzir a carga). Nesta situação, podemos utilizar protocolo baseado em posição , ou seja, passar valores de parâmetros sem os nomes dos próprios parâmetros.
"Leo Tolstoy" | "Anna Karenina" | 1873
Os dados neste formato ocupam muito menos espaço do que um arquivo JSON completo. Claro, existem outros formatos de serialização, mas você não precisa conhecê-los todos agora :) É bom estar familiarizado com os formatos que hoje são o padrão da indústria para desenvolvimento de aplicativos e lembrar suas vantagens e diferenças entre si . E nossa palestra chegou ao fim :) Não se esqueça de resolver alguns problemas hoje! Ver você de novo! :)
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION