문제

내가를 받으려고 스트림의 XML 이벤트를 통해 자바 NIO 채널입니다.나는 새로운 양모 및 StAX 구문 분석,그래서 나이 매우 쉽게 무언가가 있:)

내 검색하기 여러 가지 색소폰고 택스 구현,하지만 그들은 모든 것에서 작동하는 InputStreams 및 InputSources 지 NIO 습니다.두 개의 가장 가까운 시도를 만들었을 얻을 수 있었 the InputStream 채널에서 만들 PipedInputStream:

// method 1
PipedOutputStream out = new PipedOutputStream();
InputStream in = new PipedInputStream(out);
PrintWriter writer = new PrintWriter(out);

//method 2
InputStream in = channel.socket().getInputStream()
//method 3
IputStream in = Channels.newInputStream(channel);

다음:

XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance()
        .createXMLStreamReader(in);
//...

을 때 위의 코드를 사용 방법 1,블록에 createXMLStreamReader 라인입니다.때 방법 2/3 의 사용,그들은 즉시 던져 IllegalBlockingModeException(나는 이유를 이해).어쩌면 새로운 접근 방식이 필요합니까?

나의 목표는 차단하지 않는 서버를 선택=>받아들이 문자 데이터에서는 클라이언트=>을 분석하 XML 을 사용하여 이벤트가 특정 인코딩=>기대하는 이벤트 객체는 또 다른 스레드 처리를 위해=>반환을 선택합니다.

그래서 나는 내려 무언가를,또는 더 나은 방법을 사용할 수 있습니까?그렇다면 무엇인가?

감사합니다!

도움이 되었습니까?

해결책

당신은 당신을 사용할 필요가 NIO?그것은 제공하지 않을 수도 있습니다 상대적 이점은 원래 예상되:

폴 Tyma: 을 죽이 신화하십시오.NIO 가 보다 빠른 IO

폴 Tyma: 자바를 작성하는 다중 스레드 서버는 오래 되는 무엇이 새로운

스택을 보여주는 내부 createXMLStreamReader()를 차단할 수 있는 데 도움이지만,그것은 아마 행동으로 설계되었습니다.는 경우 그것은 작동하도록 설계되었에 대한 InputStreams 는 항상 하나(1)이 예상되는 양의 데이터(2)최종;또는(3)블록,다음 자동으로 행동(일반적으로 더 복잡하고 상태 저장)방법을 반환할 수 있는 독서 후의 금액을 불완전한 입력 없이 많이 깊은 재작업.

다른 팁

또한 XMPP 서버 사용을 위해 둘러보기 시작했습니다. 나는 주변을 둘러 보았고 Nio 지원을 약속하는 구현이 단 하나 뿐인 것 같습니다 : Aalto http://wiki.fasterxml.com/aaltohome

그러나 2009 년 3 월 버전 0.9.5까지 발표 한 것 같습니다. 더 큰 프로젝트 (아마도 Woodstox)를 설득 할 수 없다면 NIO 지원을 위해 내부 클래스 중 일부를 재 작업하십시오.

java.nio.channels.Channels 유틸리티 클래스를 사용해야합니다.

ReadableByteChannel ch = //...
InputStream in = Channels.newInputStream(ch);

차단하려면 소켓 채널을 구성해야 할 수도 있습니다.

SelectableChannel ch = //...
ch.configureBlocking(true);

이것은 당신이 비 블로킹 I/O를 할 수 없다는 것을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top