2012-02-17 3 views
3

필자가 쓰고있는 Java 프로그램을 사용하여 파일과 업데이트를 전송해야하는 이기종 운영 체제가있는 지리적으로 원격 노드가 있습니다. 현재 파일이 변경되면 전체 파일을 다시 보내야합니다. 서로 다른 파일의 섹션을 확인하고 보낼 수있는 방법이 있습니까 (이 파일은 반드시 텍스트 일 ​​필요는 없으며 모든 형식이 될 수 있습니다). 내가 생각할 수있는 유일한 방법은 파일을 블록으로 분할하고 블록을 해시 한 다음 해쉬를 요청자에게 돌려 보낸다. 요청자는 필요한 블록 만 요청하지만 작은 블록과 큰 파일의 경우 이것은 큰 오버 헤드이므로 아무 것도 없다. 단일 파일이 전송 될 필요가있는 블록 목록을 제공하도록 분석 될 수 있도록 내 파일을 설명하는 메시지를 보내는 방법?메시지 다이제스트와 같은 것이지만 점진적으로 파일을 설명합니다.

대부분의 다이제스트 기능은 데이터의 작은 변경으로 전체 해시 출력에 큰 변화가 생기도록 설계되었으므로 모든 운영 체제에서 작동 할 기본적으로 그 반대가 필요합니다.

답변

3

질문을 올바르게 이해하면 두 시스템에서 파일을 동기화 상태로 유지해야합니다. rsync이라는 도구가있어 파일에 대한 변경 사항 만 전송하여 두 파일 (또는 전체 디렉토리)을 동기화 할 수 있습니다.

Rsync algorithm에 관심이있을 수 있습니다.

+0

rsync가 처음으로 마음에 들었습니다. 심지어 Java 래퍼가 있습니다 (기존의 패키지는 권장하지 않음). – Perception

+0

절대적으로 완벽하기 때문에 사용자 정의 통신 프로토콜을 사용해야하므로 기존 라이브러리를 사용할 수 없었습니다. 이 알고리즘은 시스템을 최적화하는 데 꼭 필요한 것 같습니다. – feldoh

관련 문제