원격 통화에서는 매개 변수 및 반환 값을 네트워크를 통해 전송해야합니다. 이 용도는 객체를 바이트 스트림으로 변환하기 위해 직렬화가 필요하며, 한쪽 끝에서 다른 쪽 끝으로 다시 객체로 사로화해야합니다.
Hessian에 대한 이전 기사가 있기 때문에 여기서는 Java 직렬화와 Hessian 직렬화의 차이점에 대해 간략하게 이야기 할 것입니다.
우선, Hessian 직렬화는 Java 직렬화보다 훨씬 효율적이며 생성 된 바이트 스트림은 훨씬 짧습니다. 그러나 비교적 말하면, Java 직렬화는 신뢰할 수 없으며 Java 직렬화 지원만큼 포괄적이지 않습니다. 그러한 차이의 이유는 그들의 구현을 보는 것입니다.
먼저 Java Serialization에 대해 이야기합시다. 특정 작업 원칙에 대해서는 이야기하지 않습니다. Java Serialization은 바이트 스트림에서 직렬화 할 객체 클래스의 메타 데이터 및 비즈니스 데이터를 직렬화하고 전체 상속 관계에서 모든 것을 직렬화합니다. 바이트 스트림 IT 직렬화는 모든 정보를 포함하는 컨텐츠에 대한 객체 구조에 대한 완전한 설명이므로 덜 효율적이며 바이트 스트림은 비교적 큽니다. 그러나 모든 것이 실제로 직렬화되었으므로 모든 것이 전송 될 수 있다고 말할 수 있으므로 더 유용하고 신뢰할 수 있습니다.
Hessian 직렬화와 관련하여 구현 메커니즘은 데이터에 중점을두고 간단한 유형 정보를 동반하는 것입니다. Integer A = 1과 마찬가지로 Hessian은 I 1과 같은 스트림으로 직렬화됩니다. I INT 또는 Integer를 나타내고 1은 데이터 내용입니다. 복잡한 객체의 경우 Java 반사 메커니즘을 통해 Hessian은 객체의 모든 속성을 맵으로 직렬화하여 m classname propertyname1과 같은 스트림을 생성합니다. i 1 propertyname s stringValue (아마도 정확하게 잊어 버리기). 기본 유형 설명 및 데이터 컨텐츠를 포함합니다. 직렬화 프로세스 중에 객체가 이전에 나타나면 Hessian은 R 인덱스와 같은 블록을 직접 삽입하여 참조 위치를 나타내므로 직렬화 및 사제화 시간이 다시 제거됩니다. 이를 수행하는 가격은 Hessian이 다른 유형을 다르게 처리해야한다는 것입니다 (Hessian은 게으르고 짧게 지원하지 않음). 특정 특수 물체 (예 : StackTraceElement)를 만나면 특수 작업을 처리해야합니다. 동시에 직렬화를 수행하기 위해 구현에 깊이 들어 가지 않기 때문에 Collections.synchronizedmap을 통해 얻은 맵과 같은 경우에는 특정한 불일치가있을 것입니다.
직렬화는 쉬운 스토리지 또는 네트워크 전송을 위해 객체를 바이트 스트림으로 직렬화하는 것을 말합니다. 사제화는 반대이지만 바이트 스트림을 물체로 다시 변환합니다. 우리가 일반적으로 사용하는 것은 Hessian 직렬화 방법과 Java 직렬화 방법입니다. 두 직렬화 방법의 효율 및 직렬화 크기는 다릅니다. 테스트 결과로 판단하면 Hessian이 더 좋습니다. Hessian 직렬화 예는 다음과 같습니다 (파일 IO 및 네트워크 IO, 순수한 직렬화 및 사막화) :
/** * Pure Hessian Serialization * @param 객체 * @return * @throws Exception */public static byte [] serialize (Object)는 예외를 던져 {if (object == null) {throw nullpointerexception ();} bytearrayoutputStream os = new BytearOutputStream (); hessianserializeroutput (os); hessianoutput.writeobject (object); return os.tobytearray ();}/** * 순수한 Hessian deserialization * @param bytes * @return * @throws 예외 */public static object deserialize (byte [] bytes) 예외 {if). nullPointerException ();} ByTearRayInputStream은 = New BytearRayInputStream (바이트); HessianserializerInput hessianinput = new HessianserializerInput (is); 객체 객체 = hessianinput.readobject (); return object;}또 다른 일반적인 방법은 Java 직렬화입니다.
/** * Java Serialization * @param obj * @return * @throws 예외 */public static byte [] serialize (Object obj)는 예외를 던지기 예외 {if (obj == null) 던지기 새로운 nullpointerexception (); bytearrayoutputStream os = new BytearRayoutputStream (); ObjectOutputStream (); ObjectOutputStream (os); out.writeObject (obj); return os.tobytearray ();}/** * java deserialization * @param by * @return * @throws 예외 */public static object deserialize (byte [] by) 예외 {if (== null) tash nullpoinception (by awinpoincection); bytearrayinputStream (by); objectInputStream in = new ObjectInputStream (is); return in.readObject ();}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.