字节序列框架

时间:2012-05-07 06:52:23

标签: java networking byte communication

假设我按以下顺序从网络获取一系列字节: X X X X = X X X X = X X X X = ......依此类推 您可以立即注意到模式(消息是一个5字节的序列:“X X X X =
X可以是除“=”之外的任何数字

现在,传输定期发生。 在某些时候,我的应用程序正在启动并获取字节序列

获取这些字节并将其构建为5字节消息的最佳算法是什么?
有两个问题:
1.你如何找到第一条消息?我想我需要删除一些字节,直到我得到'='对吗? 2.应用程序如何处理暂停的transimmision和 new start

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用阻塞读取(这是最常见的,因为它最简单)一次读取5个字节。

通常情况下,您不会假设您在开始时拥有垃圾数据,只是阅读所有内容。如果你有一个标题,我也会读到它。

DataInputStream dis = new DataInputStream(socket stream);
byte[] bytes = new byte[5];

int sep;
do {
  dis.readFully(bytes);
  process(bytes);
} while((sep = dis.read()) == '=');
if (sep > 0)
   System.err.println("Unexpected character "+ (char) sep));