假设我按以下顺序从网络获取一系列字节:
X X X X = X X X X = X X X X = ......依此类推
您可以立即注意到模式(消息是一个5字节的序列:“X X X X =
X可以是除“=”之外的任何数字
现在,传输定期发生。 在某些时候,我的应用程序正在启动并获取字节序列
获取这些字节并将其构建为5字节消息的最佳算法是什么?
有两个问题:
1.你如何找到第一条消息?我想我需要删除一些字节,直到我得到'='对吗?
2.应用程序如何处理暂停的transimmision和 new start 。
答案 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));