2011-10-07 3 views
0

두 프로세스 (본질적으로 JVM) 사이에서 객체를 스트리밍하기 위해 XStream을 사용하려고합니다. 나는 이전에이 포럼에서 비슷한 질문을하고 있음을 발견했다. (다음 링크 참조).XStream을 사용하여 알 수없는 (잠재적으로 매우 큰) Java 객체를 스트리밍

Best approach to serialize XML to stream with Java?

내 요구 사항 및 위의 질문에 주어진 솔루션 사이의 기본적인 차이는 스트리밍되는 모든 객체가 스트리밍 작업의 시작 부분에 사용할 수없는 것입니다. 보내는 프로세스가 새로운 객체를 기다리고 그 객체가 올 때와 끝날 때까지 스트리밍하도록합니다. 따라서이 작업은 잠재적으로 오랜 시간이 걸릴 수 있습니다 (두 개체의 스트리밍간에 많은 유휴 시간이 있음).

한편 위의 솔루션에서 우리는 모든 컬렉션 요소를 처음에 알면 훌륭하게 작동합니다.

이전에 그러한 요구 사항을 만난 사람이 누구인지 알려 주시면 알려주세요.

답변

0
는 두 부분으로 문제를 휴식

: 파트 1에 대한 연결

을 통해 각 개별 객체를 직렬화 프로세스

  • 사이

    1. 통신/연결, 당신이 원하는 여부를 말하기 어렵다 더 많은 데이터가있을 때마다 하나의 연결을 유지하거나 새 연결을 열 수 있습니다. 새로운 연결을 여러 번 열면 많은 비용이 소요될 수 있으므로이 비용이 너무 높다면 하나의 연결을 사용하십시오.

      2 부에서는 개체를 모두 하나에 넣으 려하지 않고 자체 문서에 개체를 넣는 것이 더 깨끗해 보입니다. 이것은 XStream으로 구현하는 것이 간단해야합니다. 가장 바깥 쪽 문서의 마지막 닫기 태그를 보내는 것과 비슷한 "완료"라는 개념이 필요한 경우 시간이 맞으면 사용자 지정 "완료"메시지를 보냅니다.

  • +0

    답장을 보내 주셔서 감사합니다. 이 문제는 이제 해결되었습니다. 클라이언트 쪽에서 XStream 용 StAX 드라이버를 사용했고 서버가 XML 문서 프롤로그를 즉시 보내고 실제 이벤트가 발생할 때까지 기다리지 않도록했습니다. – hsg

    +0

    오래 실행중인 연결을 사용하는 경우 네트워크/연결 중 딸꾹질이 발생하고 스트리밍 데이터가 중단되면 어떤 일이 발생하는지 알 수 있습니다. 나는 StAX 드라이버가 행복하지 않을 것이라고 생각한다. – jtoberon

    +0

    오 예. 마지막으로 본 객체 ID를 클라이언트 측에서 캐싱합니다. 따라서 네트워크/연결에 실패하면 서버에 다시 연결하고 마지막으로 본 객체 ID를 보냅니다. 그런 다음 서버는 클라이언트가 본 후에 나머지 오브젝트를 전송하여 응답합니다. – hsg

    관련 문제