我認爲我是netty的新手;我正在嘗試創建一個客戶端到外部服務器,此服務器輸出消息以0x0d終止,所以我決定使用DelimiterBasedFrameDecoder來處理這些消息。DelimiterBasedFrameDecoder,它是如何工作的?
這只是一個處理程序的測試:
public class TestHandler extends DelimiterBasedFrameDecoder {
public TestHandler(){
super(200, true, ChannelBuffers.wrappedBuffer(new byte[] { 0x0d }));
}
@Override
protected Object decode(ChannelHandlerContext ctx, Channel ch,
ChannelBuffer cbuf) throws Exception {
ByteBuffer buf = ByteBuffer.allocate(cbuf.readableBytes());
cbuf.readBytes(buf);
byte[] data = buf.array();
for(byte b : data){
System.out.print(b + " ");
}
System.out.println();
...... (some other code)
}
我看到這個錯誤是,當我在構造函數中指定它不會刪除分隔符;在byte []數據的末尾,我總是有0x0d; 因此,正如測試,我改變了分隔符在構造函數中穿上它的測試值將0x55一樣
super(200, true, ChannelBuffers.wrappedBuffer(new byte[] { 0x55 }));
和它相同的方式工作,沒有區別與以前。 我想我以錯誤的方式使用它,或者我以錯誤的方式讀取數據。 什麼是正確的方式來使用這個類?
要清楚的是,在這個處理程序的真實代碼中,我從讀取的數據創建一個對象,然後從decode()方法返回這個對象,然後我有另一個處理程序來擴展SimpleChannelHandler來獲取這個對象(它是類似於用戶指南中的示例)。
感謝您的幫助 再見