Para a serialização de um objeto Java, gostaria de testar a diferença entre usar JSON e usar ferramentas gerais de serialização em termos de desempenho temporal e espacial.
JSON escolhe usar o fastjson.
A ferramenta de serialização usa Protostuff e Kyro. Por que não usar protobuf? Porque sinto que, para uma classe Java com centenas de propriedades existentes, criar um novo arquivo proto correspondente é um pouco anti-humano. Protostuff é uma versão aprimorada do Protobuf, que permite serializar um Objeto Java diretamente, usando-o de forma semelhante ao Kyro, mas sem tantos processos intermediários quanto o Protobuf. Outros, como Hession, Java com serialização, etc., dizem que têm desempenho muito pior que Kryo e Protobuf, então não sei o que esperar.
Após um teste simples, percebi que a diferença era bastante óbvia, então senti que não havia necessidade de fazer uma avaliação específica. Corte um parágrafo do registro e envie, todo mundo sinta.
custo é System.nanoTime(); As três são as configurações padrão, sem nenhuma configuração. A área de espaço após a serialização é um pouco menor que a do protostuff, e ambos são muito maiores que o do JSON. Isso é fácil de entender, afinal, as strings json são legíveis, não force demais. O tempo necessário para serialização e desserialização é melhor do que o Kyro sobre FastJSON, e a diferença é bastante óbvia.
Então, em conclusão, se não houver requisitos extremamente exigentes para espaço, o Protostuff pode ser a melhor escolha. Protostuff tem uma vantagem adicional sobre o Kyro, ou seja, se a classe Java adicionar campos após a serialização e antes da desserialização (o que é inevitável em negócios reais), o Kyro será inútil. No entanto, protostuff pode ser usado desde que seja adicionado ao final da aula e use a série Sun JDK. Portanto, se a serialização for usada em cenários como cache, e o objeto serializado precisar ser armazenado por muito tempo, você só pode escolher protostuff.
Claro, se houver necessidade de legibilidade ou algo assim, você só pode usar json.
|