SentenceReader
에는 "스트림 된"데이터를 수락 할 수있는 방법이 없지만 서브 클래 싱을 사용하면 데이터를 수락 할 수 있습니다.
는
SentenceReader
의 핵심은 일반적으로이 DataReader를이 별도의 스레드 SentenceReader
자체에서 폴링 데이터를위한 DataReader
를 사용하여, 우리는 우리가 필요로하는 것을 얻기 위해이 구조를 수정할 수 있습니다.
먼저 우리 자신의 클래스로 SentenceReader
을 서브 클래스 화하고 적절한 생성자와 메소드를 제공하고 시작 및 중지 메소드의 효과를 제거하십시오. 우리는 지금 파일로 null
를 제공 (향후 버전 직접에서 DataReader를 통과하는 방법을 제공 희망) 우리는 지금 우리 자신의 Netty 핸들러 내부에 내부 클래스 DataReader
의 모든 기능을 구현해야
public class NettySentenceReader extends SentenceReader {
public NettySentenceReader() {
super((InputStream)null);
}
@Override
public void start() {
}
@Override
public void stop() {
}
}
을 복제하기 !
SentenceReader reader = new NettySentenceReader();
bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
private static final StringDecoder DECODER = new StringDecoder();
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
pipeline.addLast(DECODER);
pipeline.addLast(new SentenceReaderHandler(reader));
}
});
'경우 (ctx.isAc : 같은 동작
마지막으로, 우리는 인 Netty 파이프 라인으로이를 통합하는 데 필요한 tive())'isActive() 메서드가 존재하지 않습니다. –
fireSentenceEvent (net.sf.marineapi.nmea.sentence.Sentence) '가'net.sf.marineapi.nmea.io.SentenceReader '에 public이 아닙니다. 외부 패키지 –
에서 액세스 할 수없는 경우 해당 메소드에 액세스 할 수없는 경우 리플렉션을 사용하여 해당 메소드에 대한 액세스 권한을 강제로 가져야하지만 오늘은 내일 할 것이라고 설명 할 시간이 없습니다 – Ferrybig