2011-01-18 3 views
0

Java 인스턴스에서 네트워크를 통해 다른 인스턴스로 메시지 (직렬화 가능 개체)를 보내려고합니다. 전체 개체가 제대로 전송되었는지 확인하고 싶습니다.개체 전송이 완료되었는지 확인하는 방법

내 첫 번째 단계는 개체의 체크섬을 계산하는 것입니다. 그런 다음 체크섬을 객체에 포함 시키거나 메시지 및 체크섬에 대한 컨테이너 객체를 만듭니다.

내 두 번째 단계는 다른 쪽 개체에 대한 체크섬을 확인하는 것입니다.

세 번째 단계는 수신자가 문제의 개체가 수신되었고 체크섬이 통과했는지 여부를 알리는 확인 메시지를 보내는 것입니다. 체크섬에 실패한 경고가 표시되면 몇 번 다시 시도합니다.

잠시 후 확인을받지 못하면 몇 번이나 다시 보내려고합니다.

질문 :

내 프로토콜은 객체가 제대로 전달되었는지 확인하기 위해 바로 소리를합니까?

나는 이것을 java에서 어떻게 구현해야하는지 알고 싶습니다. CRC32 클래스를 사용하여 체크섬을 생성합니까?

보너스 질문 : 각 메시지를 압축하는 경우 압축 후 이전에 체크섬을 생성합니까? Java에서 개체를 압축하는 방법은 무엇입니까?

답변

2

오류율이 낮은 안정적인 네트워크를 사용하는 경우 추가 체크섬을 추가 할 필요가 없습니다. 먼저 체크섬없이 프로토콜을 구현하고 필요할 경우 추가하십시오.

DeflatorOutputStream, InflatorInputStream을 사용하여 데이터를 압축 할 수 있습니다. 압축 된 데이터가 손상되면 Object의 압축을 풀 때 예외가 발생할 가능성이 큽니다. 즉 미묘한 오류가 발생하기 쉽지 않습니다.

그러나 개체가 크지 않으면 매우 잘 압축되지 않을 수 있으며 압축시 더 커질 수 있습니다.

1

압축, 나는 아파치 우편 유틸리티를 추천하고 싶습니다 http://commons.apache.org/compress/apidocs/org/apache/commons/compress/archivers/zip/package-summary.html

당신은 당신이 검사를 건너 뛸 수 있습니다 압축하는 경우. 압축 알고리즘은 데이터 손상에 매우 민감합니다. 개체가 다른 쪽 끝에서 압축을 풀지 못하면 전송 중에 일부 정보가 손실됩니다.

+2

왜 Apache zip 유틸리티입니까? JDK에는 잘 작동하는 클래스도 포함되어 있습니다. – Mot

0

하나의 추가 (ObjectIO 스트림을 통해 내가하는 일)에 동의합니다. - [1] 들어오는 내용을 Object로 읽고 "instanceof"로 해당 클래스를 찾으십시오. 예상되는 클래스가 아닌 경우 디버깅 할 시간입니다.

다른 상황에서는 다음에 도착할 객체의 내용에 대한 정보가 포함 된 String을 보내야합니다. 이 문자열을 구문 분석하고, 객체를 읽고, 타입 변환하고, 문자열의 정보가 무엇인지 확인하고, 확인을 작성하십시오.

관련 문제