Вы можете перезаписать ваш ConsoleReader InputStream.ИМХО, это разумно, потому что STDIN - это «медленный» поток.Пожалуйста, улучшите пример для ваших нужд.Это только набросок, но он работает:
def createReader() =
terminal.synchronized {
val reader = new ConsoleReader
terminal.enableEcho()
reader.setBellEnabled(false)
reader.setInput(new InputStreamWrapper(reader.getInput())) // turn on InterruptedException for InputStream.read
reader
}
с упаковкой InputStream:
class InputStreamWrapper(is: InputStream, val timeout: Long = 50) extends FilterInputStream(is) {
@tailrec
final override def read(): Int = {
if (is.available() != 0)
is.read()
else {
Thread.sleep(timeout)
read()
}
}
}
PS Я пытался использовать NIO - много проблем сSystem.in (особенно кроссплатформенный).Я вернулся к этому варианту.Загрузка процессора составляет около 0%.Это подходит для такого интерактивного приложения.