0
我遇到了編碼FrameDecoder.decode()爲tcp netty客戶端的問題。最好的方式來編碼Netty FrameDecoder.decode
protected Object decode(ChannelHandlerContext ctx, Channel channel,
ChannelBuffer buffer) throws Exception {
在上面的簽名中,緩衝區應該包含需要加框的字節。但那爲什麼要退回?我知道如果返回的對象爲null,這表明需要更多的數據到這個緩衝區,但是如果我返回一個帶有部分幀的未讀字節的緩衝區,會發生什麼?這會被調用更多的字節添加?
假設給定的調用decode()
有一個100字節的緩衝區。在這100箇中,有2個25和55字節的完整幀和20個字節的部分幀。我能讀取第一個完整幀(25字節)並返回緩衝區(其中75字節 - 55個字節的1個完整幀和另一個部分幀的20個字節)?這會在下次調用解碼時導致任何字節被覆蓋嗎?或者在下一次調用中讀取下一個幀(55字節)是否可以?
能否請您參考我的100字節緩衝區案例解釋一下: 1.是否需要返回幀?我的意思是我不能簡單地獲取幀的字節並調用回調,將這些字節傳遞給回調函數? \t ChannelBuffer frame = buffer.readBytes(length); //長度是幀中的字節數 \t callback.invoke(frame) \t 2.如果我讀取25個字節的第一幀,那麼下一個調用是否包含剩餘的兩個幀以供讀取?還是會導致數據的腐敗? – Bhaskar