用Java实现字节填充

需要字节填充 在数据链路层的可变大小帧中,我们需要定义一种将一帧与下一帧分离的方法。字节填充用于完成任务。在里面 字节填充 在帧的开头和结尾添加8位标志(“F”),从而区分一帧和下一帧。因此,每次遇到标志序列(“F”)时,它都表示帧的开始或结束。然而,如果旗标图案(“F”)出现在帧本身携带的数据中,这种巧妙的方案会产生差异。字节填充在这里起到了解救作用,只要在帧所承载的数据中出现字节填充,就在标记模式之前用额外的8位转义序列(“E”)填充原始数据。然后,接收器必须对转义序列进行去填充,以获得原始数据。 此时可能出现的一个简单问题是,如果转义序列(“E”)构成要发送的数据的一部分,该怎么办!这种情况的处理方式与上述完全相同,即在构成数据一部分的转义序列之前,向原始数据添加额外的8位转义序列(“e”)。 在面向字符的协议中,要携带的数据是8位字符,字节填充用于处理上述问题。 为了使事情更简单,我们只考虑发送数据中的三种字节序列,如下: F :标志序列 E :转义序列 D :任何其他数据序列 例如:

At Sender SideEnter the Message to be Sent : DDEDFFDEThe data being sent (with byte stuffed) is : FDDEEDEFEFDEEFSending Message....Thanks for the Feedback Server!!At Receiver SideMessage Received...Successfully!!!The Stuffed Message is : FDDEEDEFEFDEEFThe Destuffed Message is : DDEDFFDEMessaging is over.....EXITING

从上面的例子中,我们可以看到原始数据是如何在接收端恢复的。 方法 在发送方(客户端)

  1. 发送端的每个帧的数据首先在每个帧的开始和结束处填充8位标志序列(“F”)。
  2. 接下来,扫描数据,查看是否有任何类似的标志序列(“F”)构成其一部分。如果是,则在每个这样的标志序列之前,填充一个额外的转义序列(“E”)。
  3. 现在,如果发现任何类似的转义序列(“E”)构成要发送的数据的一部分,那么在每个此类转义序列出现之前,会填充一个额外的转义序列(“E”)。
  4. 最后,这些填充数据由发送方发送。
    1. 接收器跳过接收到的数据的第一个字节和最后一个字节,因为它们仅分别用于发送一帧的开始和结束的信号,并且不携带任何有用的数据。
    2. 从wards上的下一个字节开始扫描数据,如果连续发现两个转义序列(“E”),则第一个转义序列被取消填充。类似地,如果一个转义序列后面跟着一个标志序列(’F’),则前者被取消填充。
    3. 这种策略有助于接收器准确地恢复实际发送的数据。
© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞13 分享