java에서 흔히 볼 수 있는 서열화 방식

3358 단어 java서열화
원격 호출에서 매개 변수와 반환 값을 네트워크를 통해 전송해야 합니다. 이 사용은 서열화로 대상을 바이트 흐름으로 바꾸고 한쪽에서 다른 한쪽으로 되돌린 후에 다시 서열화하여 대상이 되어야 합니다.
앞에서 hessian을 언급한 바와 같이 자바 서열화와 hessian 서열화의 차이를 간단히 말하겠습니다.
우선hessian 서열화는 자바 서열화보다 효율적이고 생성된 바이트 흐름도 매우 짧다.그러나 상대적으로 Java 서열화는 믿을 만하지 않고 Java 서열화 지원의 전면적이지도 않다.이런 차이가 생기는 것은 이들의 실현 방식을 봐야 한다.
먼저 자바 서열화를 말하자면 구체적인 작업 원리는 말할 것도 없다. 자바 서열화는 서열화할 대상류의 메타데이터와 업무 데이터를 모두 바이트에서 서열화하고 전체 계승 관계의 물건을 모두 서열화할 것이다.그것이 서열화된 바이트 흐름은 그 대상의 구조부터 내용에 대한 완전한 묘사로 모든 정보를 포함하기 때문에 효율이 낮고 바이트 흐름이 비교적 크다.그러나 모든 내용을 서열화한 것이 사실이기 때문에 무엇이든 전송할 수 있기 때문에 더욱 유용하고 믿을 만하다.
한편hessian 서열화는 그 실현 메커니즘은 데이터에 중심을 두고 간단한 유형 정보를 첨부하는 방법이다.Integer a=1,hessian은 I1과 같은 흐름으로 서열화되는데 I는int or Integer를 나타내고 1은 데이터 내용이다.복잡한 대상에 대해 자바의 반사 메커니즘을 통해hessian은 대상의 모든 속성을 하나의 맵으로 서열화하여 MclassNamepropertyName1 I 1propertyName SstringValue(대략 이렇게 확실하게 잊어버린)와 같은 흐름을 생성하고 기본적인 유형 설명과 데이터 내용을 포함한다.한편, 서열화 과정에서 만약에 하나의 대상이 이전에 나타났다면hessian은 R index와 같은 블록을 직접 삽입하여 인용 위치를 표시하여 다시 서열화하고 반서열화하는 시간을 절약할 것이다.이렇게 하는 대가는 hessian이 서로 다른 유형에 대해 서로 다른 처리를 해야 한다는 것이다. (따라서 hessian은 직접적으로 게으름을 피우고 short를 지원하지 않는다.) 그리고 특정한 대상을 만나면 특수한 처리를 해야 한다. (예를 들어 Stack Trace Element)그리고 내부에 깊이 들어가서 서열화를 하지 않았기 때문에 어떤 경우에 일정한 불일치가 발생할 수 있다. 예를 들어 Collections를 통해.synchronizedMap에서 얻은 맵입니다.
서열화는 하나의 대상을 바이트 흐름으로 서열화하여 저장이나 네트워크 전송에 편리하도록 하는 것을 말한다.반면에 반서열화는 정반대이다. 바이트를 흐르게 하고 하나의 대상으로 바꾼다.우리가 평소에 많이 사용하는 것은hessian 서열화 방식과java 서열화 방식, 두 가지 서열화 방식의 효율, 그리고 서열화 크기가 다르다. 테스트 결과를 보면hessian이 좋다.다음은 hessian 서열화 예시 (파일 IO와 네트워크 IO, 순수 서열화와 반서열화 없음) 를 썼습니다.

/**
 *  hessian 
 * @param object
 * @return
 * @throws Exception
 */
public static byte[] serialize(Object object) throws Exception{
if(object==null){
throw new NullPointerException();
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
HessianSerializerOutput hessianOutput=new HessianSerializerOutput(os);
hessianOutput.writeObject(object);
return os.toByteArray();
}
/**
 *  hessian 
 * @param bytes
 * @return
 * @throws Exception
 */
public static Object deserialize(byte[] bytes) throws Exception{
if(bytes==null){
throw new NullPointerException();
}

ByteArrayInputStream is = new ByteArrayInputStream(bytes);
HessianSerializerInput hessianInput=new HessianSerializerInput(is);
Object object = hessianInput.readObject();
return object;
}

또 다른 흔히 볼 수 있는 것은 자바 서열화 방식이다.

/**
 * java 
 * @param obj
 * @return
 * @throws Exception
 */
public static byte[] serialize(Object obj) throws Exception {
if (obj == null)
throw new NullPointerException();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(os);
out.writeObject(obj);
return os.toByteArray();
}
/**
 * java 
 * @param by
 * @return
 * @throws Exception
 */
public static Object deserialize(byte[] by) throws Exception {
if (by == null)
throw new NullPointerException();
ByteArrayInputStream is = new ByteArrayInputStream(by);
ObjectInputStream in = new ObjectInputStream(is);
return in.readObject();

}

이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기