Em chamadas remotas, os parâmetros e os valores de retorno precisam ser transmitidos pela rede. Esse uso requer a serialização para converter o objeto em um fluxo de bytes e, em seguida, o deseralizá -lo novamente em um objeto de uma extremidade para a outra.
Como há um artigo anterior mencionando Hessian, aqui falaremos brevemente sobre a diferença entre a serialização de Java e a serialização da Hessiana.
Primeiro de tudo, a serialização da Hessiana é muito mais eficiente que a serialização de Java, e o fluxo de bytes gerado é muito mais curto. Mas, relativamente falando, a serialização de Java não é confiável e não é tão abrangente quanto o suporte de serialização de Java. A razão para essa diferença é analisar sua implementação.
Vamos falar sobre a serialização do Java primeiro. Não vou falar sobre o princípio de trabalho específico. A serialização de Java serializará os metadados e os dados comerciais da classe de objeto a serem serializados a partir do fluxo de bytes e serializam todas as coisas em todo o relacionamento de herança. O fluxo de bytes que serializa é uma descrição completa da estrutura do objeto para o conteúdo, contendo todas as informações, por isso é menos eficiente e o fluxo de bytes é relativamente grande. Mas como tudo é realmente serializado, pode -se dizer que tudo pode ser transferido, por isso também é mais utilizável e confiável.
Quanto à serialização da Hessiana, seu mecanismo de implementação é focar nos dados e acompanhar informações de tipo simples. Assim como o número inteiro A = 1, Hessian serializará em um fluxo como I 1. Eu representa int ou inteiro e 1 é o conteúdo de dados. Para objetos complexos, através do mecanismo de reflexão Java, Hessian serializa todas as propriedades do objeto como um mapa, produzindo um fluxo como M ClassName PropertyName1 i 1 PropertyName S StringValue (provavelmente, esqueça exatamente), que contém a descrição do tipo básico e o conteúdo de dados. Durante o processo de serialização, se um objeto aparecer antes, Hessian inserirá diretamente um bloco como o índice R para representar uma posição de referência, eliminando assim o tempo de serialização e deserialização novamente. O preço de fazer isso é que Hessian precisa lidar com diferentes tipos de maneira diferente (então Hessian é preguiçoso e não suporta curto), e ele também precisa lidar com operações especiais ao encontrar certos objetos especiais (como StacktraceElement). E, ao mesmo tempo, como não se aprofunda na implementação para realizar a serialização, haverá certas inconsistências em algumas ocasiões, como mapas obtidos por meio de coleções.SynchronizedMap.
A serialização refere -se à serialização de um objeto em um fluxo de bytes para facilitar o armazenamento ou a transmissão de rede; Enquanto a deserialização é exatamente o oposto, convertendo o fluxo de bytes de volta a um objeto. O que geralmente usamos é o método de serialização da Hessiana e o método de serialização de Java. A eficiência e o tamanho da serialização dos dois métodos de serialização são diferentes. A julgar pelos resultados dos testes, Hessian é melhor. Aqui está um exemplo de serialização da Hessiana (sem arquivo e rede de IO, serialização pura e deserialização):
/** * serialização pura de Hessian * @param objeto * @return * @throws Exceção */public static byte [] serialize (objeto objeto) lança exceção {if (object == null) {tiro new nullPointerException ();} bytearrayoutstream OS = newteiaRaRaRaRaTream (); hess ();} bytearraRapTream OS = ByTeANOUTSTREAM (); hess; HessianserializerOutput (OS); hessianOutput.WriteObject (objeto); retorna os.tobytearray ();}/** * Deserialização pura de Hessian * @param bytes * @return * @throws Exception */public Static Object deserialize (byte [] bytes) throws {se excepciona (portes */public static deserialize (byte [] bytes) throws {se NullPointerException ();} byteArrayInputStream é = novo byteArrayInputStream (bytes); hessianserializerInput hessianInput = new hessianserializerInput (IS); objeto objeto = hessianInInput.readObject ();Outro método comum é a serialização de Java:
/** * serialização java * @param obj * @return * @throws Exceção */public static byte [] serialize (objeto obj) lança exceção {if (obj == null) lançar new nullPointeException (); ObjectOutputStream (OS); out.WriteObject (obj); retorna os.tobytearray ();}/** * Java Deserialization * @param por * @return * @THOWSECTS Excepção */public static Object Deserialize (byte [] by) lança a exceção {if (por == null) tlownPoin NULLE ( ByteArrayInputStream (por); objectInputStream in = new ObjectInputStream (IS); retornar em.readObject ();}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.