2017-06-18 61 views
0

我的服務器向客戶端發送響應或將消息轉發給另一個客戶端取決於消息內容。 我需要使用8級字節的消息:括號之間6個加密字節,例如:Netty ByteBuf處理,管道中的解碼器結構

0x3C 0xE1 0xE2 0xE3 0xE04 0xE5 0xE6 0x3E 

當裝置爲0x3C符號<作爲開口幀標記,和0x3E的裝置>符號作爲閉合幀標記。

如果內部6個加密字節(0×02 0xE1 0x03時0×04 0×05 0×06)被成功地解密,數據再次含有相同標誌物:

0x3C 0x3C 0x02 0x03 0x04 0x05 0x3E 0x3E 

所以我得到的4個字節的有效載荷(0×02 0×03 0×04 0×05)。

我已經寫了FrameDecoder,但現在我不能決定剝離括號字節或不:

  • 我想寫乾淨的代碼,括號是唯一幀標記,以便它們屬於FrameDecoder責任。這對我來說意味着FrameDecoder需要去除它們。但在轉發時,FrameEncoder需要再次添加它們(也是響應編碼)。我可以簡單地將結束標記寫入緩衝區,但我不知道如何有效地將單個字節寫入Bytebuf的開頭。
  • 如果我沒有去掉標記,它看起來不是那麼幹淨的解決方案,但是我可以轉發整個接收到的Bytebuf(加密後)或者最後一個處理程序可以爲響應發送的整個Bytebuf分配8個字節。

回答

1

我建議你將解密和轉換分成兩個處理程序。 第一個人的責任就是解密原始數據。其次是將原始數據轉換爲純粹的消息。這種解決方案的好處是,如果稍後有人想改變解密方法,他只需要更改第一個處理程序而不影響第二個處理程序。同樣,變換方法也可以在不影響解密的情況下進行更改。