How to asynchronously read stdin?

前端 未结 5 474
遥遥无期
遥遥无期 2021-01-14 05:23

Is there an elegant way to fire an event when characters are available from System.in? I\'d like to avoid polling InputStream.available().

5条回答
  •  礼貌的吻别
    2021-01-14 06:07

    If you want something elegant you could easily implement an ObservableInputStream which accepts a Listener that gets warned about availability of data but you will have to implement it with an inner thread that periodically checks for data and call the listener in case.

    Think about the fact that streams aren't supposed to be used as object that send small packets but a continuous stream of bytes, that's why this approach would work only if the data that is given to the input stream doesn't effectively arrives too often (otherwise it would keep calling the listener ad libitum). In addition you will have to care about consistency, if data arrive when something is already available and the listener is warned then something can take all the bytes (which you should place in a temporary buffer) but if there's more data that just arrived you should decide how to handle (give it together with buffer, place in buffer and call listener again, etc)

提交回复
热议问题