En llamadas remotas, los parámetros y los valores de retorno deben transmitirse a través de la red. Este uso requiere serialización para convertir el objeto en una corriente de byte, y luego deserializarlo nuevamente en un objeto de un extremo a otro.
Dado que hay un artículo anterior que menciona a Hessian, aquí hablaremos brevemente sobre la diferencia entre la serialización de Java y la serialización de Hesse.
En primer lugar, la serialización de Hesse es mucho más eficiente que la serialización de Java, y la corriente de byte generada es mucho más corta. Pero relativamente hablando, la serialización de Java no es confiable, y no es tan integral como el soporte de serialización de Java. La razón de tal diferencia es observar su implementación.
Hablemos primero sobre la serialización de Java. No hablaré sobre el principio de trabajo específico. La serialización de Java serializará los metadatos y los datos comerciales de la clase de objetos que se serializarán desde la corriente de bytes, y serializarán todas las cosas en toda la relación de herencia. La transmisión de bytes que es serializa es una descripción completa de la estructura del objeto al contenido, que contiene toda la información, por lo que es menos eficiente y la corriente de byte es relativamente grande. Pero dado que todo está serializado, se puede decir que todo puede transferirse, por lo que también es más utilizable y confiable.
En cuanto a la serialización de Hesse, su mecanismo de implementación es centrarse en los datos y acompañar la información de tipo simple. Al igual que el entero A = 1, Hessian serializará en una transmisión como I 1. Representa int o entero, y 1 es el contenido de datos. Para los objetos complejos, a través del mecanismo de reflexión de Java, Hessian serializa todas las propiedades del objeto como un mapa, produciendo una transmisión como M classname Propertyname1 I 1 PropertyName s stringValue (probablemente, olvídalo exactamente), que contiene la descripción básica de la descripción y el contenido de datos. Durante el proceso de serialización, si un objeto aparece antes, Hessian insertará directamente un bloque como el índice R para representar una posición de referencia, eliminando así el tiempo de serialización y deserialización nuevamente. El precio de hacer esto es que Hessian necesita manejar diferentes tipos de manera diferente (por lo que Hessian es perezoso y no es compatible con el corto), y también necesita manejar operaciones especiales al encontrar ciertos objetos especiales (como StackTraCeElement). Y al mismo tiempo, debido a que no profundiza en la implementación para realizar la serialización, habrá ciertas inconsistencias en algunas ocasiones, como los mapas obtenidos a través de colecciones. SynchronizedMap.
La serialización se refiere a serializar un objeto en una corriente de byte para un fácil almacenamiento o transmisión de red; Si bien la deserialización es todo lo contrario, convirtiendo la corriente de byte en un objeto. Lo que usualmente usamos es el método de serialización de Hesse y el método de serialización Java. El tamaño de eficiencia y serialización de los dos métodos de serialización es diferente. A juzgar por los resultados de la prueba, Hessian es mejor. Aquí hay un ejemplo de serialización de Hessian (sin archivo IO y red IO, serialización pura y deserialización):
/** * Pure Hessian Serialization * @param Object * @return * @throws Exception */public static byte [] serialize (objeto objeto) lanza excepción {if (object == null) {throLe new NullPointerException ();} byteArArAteutputPutStream OS = newTearRaRAteutputPutEutputEx (); HessiSeRiAutizeOutputPututOutputPututOutputputput = NEWSAUTPET = NewTearAutputPet = NEWSEATPED = NEWSAUS HessianserializerOutput (OS); Hessianoutput.WriteObject (Object); return OS.TobyTearray ();}/** * Deserialización pura de Hessian * @param bytes * @return * @throws excepción */public estatic object deserialize (byte [] bytes) arroja excepción {if (bytes == null) NullPointerException ();} bytearrayInputStream es = new ByteArrayInputStream (bytes); HessianserializerInput HessianInput = New HessianserializerInput (is); Object Object = HessianInput.ReadObject (); return Object;}Otro método común es la serialización de Java:
/** * Java Serialization * @param obj * @return * @throws excepción */public static byte [] serialize (object obj) lanza la excepción {if (obj == null) tira nueva nullpointerexception (); byteArEAnTreamStReam OS = new ByTearRautputPutSeam (); ObjectOutStream Out = new New ObjectOutPutPutStream (OS); OUT.WriteObject (obj); return OS.TobyTearReRe ();}/** * Java Deserialization * @param por * @return * @throws Exception */public static Object deserialize (byte [] by) arroja excepción {if (by == null) throw new nullPointerEnterexception (); ByteArrayInputStream (por); ObjectInputStream in = new ObjectInputStream (is); return in.readObject ();}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.