【发布时间】:2015-10-26 22:45:55
【问题描述】:
我正在解析来自第 3 方硬件的流的输入。这东西打印出对人类有用的信息。它包括关键字和其他我不关心的字符。我想获取一个流并使用正则表达式找到这些关键字之一的下一次出现。然后我可以做一个switch 语句并找出发送了什么命令。
我不能使用Scanner 类,因为读取被阻塞,我不能中断它来停止线程。我也无法关闭流作为解决方法。
有什么库可以用来做我想做的事情吗?我找到了Streamflyer,但这似乎有点矫枉过正,也许不是我想要的。它还建议了FilterInputStream 和FilterReader,但我认为这些不是我想要的。
【问题讨论】:
-
我会用 Scanner 包装 InputStream,并使用 findWithinHorizon(myPattern, 0) 或 next(myPattern)。对于这两种方法,myPattern 的编写方式会稍有不同,因为第二种方法假定模式从当前位置开始。
-
如果它“打印出针对人类的消息”,那么它可能会将它们打印为单独的行,因此使用
BufferedReader并调用readLine(),然后在行上运行正则表达式。 -
@YangYing findWithinHorizion 方法会阻塞,如果没有找到,据我所知,您不能中断该阻塞。我错了吗?
-
@Andreas 它有点像在自己的行上打印东西,有一个命令在发送时不会打印新行。
标签: java regex stream inputstream