1

enter code here我正在从 Linux 中的设备读取包含十六进制字母并由“^M”分隔的流。每当设备准备好获取更多信息时,它都会发送字符“>”。流看起来像这样:

^M^M01 02 F3^M00 01 F3 3E^M>"

我需要检测 char > 并对该 char 执行操作。有没有办法可以在“>”上划界并读取该字符?

基本上它目前看起来像这样

 01 02 F3
00 01 F3 3E

我需要 > 来触发单独的操作。如果由于某种原因只有一个字符,它不会触发读取缓冲区。我在 ^M 上分界线。我需要 > 做其他事情。

4

1 回答 1

1

这样做是很有可能的。我最近写了一个项目,它使用一个非常相似的界面从多个鼠标中读取输入。来自老鼠的二进制数据是通过文件 I/O 输入的。

我认为缓冲 I/O 在这里是不合适的。出于性能原因,缓冲 I/O 将尝试为您填充缓冲区。但您的应用似乎大部分时间都在等待新角色。如果您不是批量读取,那么原始字节读取 InputStream 将起到作用:它们将在收到请求/预期的字节数(在您的情况下为 1)后立即返回。在您的情况下,在读取>字符后,您将为以下字符发出另一个单字节读取。

您需要弄清楚如何处理中间角色。一旦你处理了你的>和下面的字符,你想对后面的任何不是的字符做什么>

我在我的应用程序中所做的是直接从InputStream. 这会阻塞,所以它必须在一个Thread花费大部分时间等待的单独中完成。当第一个字符出现时,我知道要多读一些(就像你一样),然后我可以处理。我设置了某种队列来将此信息传递给我的应用程序的其余部分——你必须为你的线程间通信制定某种同步。

编辑:多个小的编辑来澄清点。对不起,如果这最终令人困惑。

于 2010-07-13T17:40:14.727 回答