仅在输入停止一段时间后才进行处理

时间:2018-04-01 19:08:14

标签: java multithreading sockets time

我将接受从套接字到字符串缓冲区的输入,一次一个字节。我想只在一段时间内没有收到任何输入时处理字符串缓冲区的内容。是否有一些库或方法来执行此操作,不涉及创建新线程来跟踪输入的每个字节后的时间?

1 个答案:

答案 0 :(得分:1)

是。您可以使用select机制等待新输入,提供超时以限制等待的时间。如果超时在输入到达之前到期,您知道在此期间没有输入,然后可以进行处理。在java中,请参阅:https://docs.oracle.com/javase/10/docs/api/java/nio/channels/package-summary.html上的SocketChannelSelector类。 (可以在网络上找到许多教程和示例。)

您还可以在底层套接字上设置接收超时,如下所述:https://stackoverflow.com/a/9150513/1076479

鉴于您打算仅在通道静止时处理输入,为什么一次只能接收一个字节的输入?一举收到所有可用的输入是不是有意义?这样会更有效率,您仍然可以使用上述机制来限制等待输入的时间。