0

我有一个文件传输应用程序(大文件),我想让它可以扩展。我使用异步回调来读取 16Kb 的消息。每当我收到一条消息时,我都会将它发送到一个将“解密”并处理它的类。使用的格式很简单:(int)Command->(int)MsgLen->(String)Msg。

这只是一个例子。我遇到的问题是,如果我想进行多次读取,处理这个问题的最佳方法是什么?如果 1 次读取中有多个命令会发生什么?例如,我快结束了,我只有 2 个字节的命令,而不是完整的 4 个?

我想到了一个队列,但是提取字节并转换它们很痛苦。有更好的选择吗?

4

1 回答 1

1

最简单的方法是保留byte[]所有未完成数据的数组(或类似的数据结构)。当新数据到达时始终附加到该数组,然后仅删除完全接收到的消息。

您唯一需要担心的是,如果您在处理另一条消息时收到一条消息 - 因此您需要锁定byte[]阵列上的操作。

有更多“聪明”的方法可以解决这个问题,但在大多数情况下,最简单的方法是最好的。

于 2012-07-10T12:46:53.350 回答