为什么使用LengthFieldPrepender / LengthFieldBasedFrameDecoder

时间:2018-01-01 17:46:10

标签: java tcp netty

我现在考虑过这个问题,为什么我要在TCP连接中使用LengthFieldPrependerLengthFieldBasedFrameDecoder

我不明白我唯一的想法是确保数据正确传输并检查长度,但如果我对TCP的理解是正确的,TCP本身应该处理数据传输正确。

2 个答案:

答案 0 :(得分:1)

TCP是一种流协议。应用程序可以对数据进行帧化,即确定数据单元(数据包或消息)的起始位置和结束位置。可靠地实现此目的的两种基本方法是预先添加消息的长度或附加分隔符。有许多方法可以对前置长度进行编码,并且分隔符有很多种可能性。 TCP协议确实保证通过单次读取发送的数据将由单次读取接收,尽管短消息通常就是这种情况。

答案 1 :(得分:0)

TCP协议应该正确处理数据传输是正确的。虽然在许多情况下,发送的数据量在接收时是未知的(即可变数量)。

要解决此问题,要发送的数据的长度将添加到数据包的标头中。如果我们知道长度是固定大小n,那么我们可以读取n个字节,然后读取保存数据的下一个length字节。